Форум сайта python.su
Приветствую.
Разбираюсь с aiohttp в связке postgres. Уровень - начинающий разработчик, ранее, для веб писал только пару приложений на django с целью обучения.
Нужно сделать выборку из двух таблиц связанных многие ко многим через третью таблицу. В терминале postgres запрос следующего вида отрабатывает нормально:
SELECT se_query.query_text, se_query.date, answer.header, answer.date FROM se_query INNER JOIN (answer INNER JOIN query_answer ON answer.id = query_answer.answer_id) ON se_query.id = query_answer.query_id ORDER BY se_query.date
@aiohttp_jinja2.template('index.html') async def index(request): async with request.app['db'].acquire() as conn: cursor = await conn.execute( 'SELECT se_query.query_text, se_query.date, answer.header, answer.date FROM se_query ' + 'INNER JOIN (answer INNER JOIN query_answer ON answer.id = query_answer.answer_id) ' + 'ON se_query.id = query_answer.query_id ORDER BY se_query.date' ) records = await cursor.fetchall() se_queries = [dict(q) for q in records] return {'queries': se_queries}
ERROR: aiohttp.server:Error handling request Traceback (most recent call last): File "/home/parallels/PycharmProjects/se_ask/venv/lib/python3.7/site-packages/aiohttp/web_protocol.py", line 418, in start resp = await task File "/home/parallels/PycharmProjects/se_ask/venv/lib/python3.7/site-packages/aiohttp/web_app.py", line 458, in _handle resp = await handler(request) File "/home/parallels/PycharmProjects/se_ask/venv/lib/python3.7/site-packages/aiohttp/web_middlewares.py", line 119, in impl return await handler(request) File "/home/parallels/PycharmProjects/se_ask/venv/se_app/middlewares.py", line 20, in error_middleware response = await handler(request) File "/home/parallels/PycharmProjects/se_ask/venv/lib/python3.7/site-packages/aiohttp_jinja2/__init__.py", line 91, in wrapped context = await coro(*args) File "/home/parallels/PycharmProjects/se_ask/venv/se_app/views.py", line 23, in index se_queries = [dict(q) for q in records] File "/home/parallels/PycharmProjects/se_ask/venv/se_app/views.py", line 23, in <listcomp> se_queries = [dict(q) for q in records] File "/home/parallels/PycharmProjects/se_ask/venv/lib/python3.7/site-packages/aiopg/sa/result.py", line 46, in __getitem__ "try 'use_labels' option on select statement." % key) aiopg.sa.exc.InvalidRequestError: Ambiguous column name 'date' in result set! try 'use_labels' option on select statement.
Офлайн
давайте алиасы полям выборки
SELECT a.id as a_id, b.id as b_id from ...
Офлайн
FishHookСпасибо, помогло!
давайте алиасы полям выборки
s = select([users.c.id, users, addresses.c.id, addresses]).select_from(users.outerjoin(addresses))
Офлайн
Еще вопрос: как при следующем запросе на добавление записи в таблицу, вернуть ее id? :
conn.execute( se_query.insert().values(query_text=params['intitle'], date=datetime.now()).returning(id) )
Офлайн