SQLAlchemy Core - в подзапросе отсутствует псевдоним - PullRequest
0 голосов
/ 24 февраля 2020

Я работал над простым SQLAlchemy Core (Python 3.x), подсчитывающим уникальный запрос с использованием следующего кода:

    table_object = sqlalchemy.Table(table_name, metadata, autoload=True, autoload_with=engine, schema=schema)

    agg_fields = [get_column_correct_case(table_object, col) for col in agg_fields]
    agg_col_obj = [table_object.c[col] for col in agg_fields]

    agg_query = sqlalchemy.select(agg_col_obj).select_from(table_object)\
                        .group_by(*agg_fields).count()

    engine.scalar(agg_query)

Хотя я считаю, что это должен быть действительный код SQLAlchemy Core, его выполнение вернулось ошибка PYODB C:

(pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]
Incorrect syntax near ')'. (102) (SQLExecDirectW); 
[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Statement(s) could not be prepared. (8180)")

Запрос SQL, сгенерированный этим кодом, который не был выполнен должным образом:

[SQL: SELECT count([ACCOUNT]) AS tbl_row_count 
FROM (SELECT dbo.history.[ACCOUNT] AS [ACCOUNT], dbo.history.[RTXNNBR] AS [RTXNNBR] 
FROM dbo.history 
GROUP BY dbo.history.[ACCOUNT], dbo.history.[RTXNNBR])]

Выполнение запроса непосредственно на SQL Сервер Похоже, что это происходит сбой, потому что вложенный выбор отсутствует псевдоним. Это ошибка? Если нет, то как мне исправить этот код?

1 Ответ

0 голосов
/ 24 февраля 2020

Я разобрался с ответом. Я был удивлен, что это было необходимо, но это можно решить, указав для псевдонима запрос.

Итак

agg_query = sqlalchemy.select(agg_col_obj).select_from(table_object)\
                            .group_by(*agg_fields).count()

становится:

agg_query = sqlalchemy.select(agg_col_obj).select_from(table_object)\
                    .group_by(*agg_fields).alias('a').count()

, что сейчас работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...