Sqlalchemy и ограниченные ключевые слова Python - PullRequest
0 голосов
/ 29 апреля 2019

Существующие БД и sqlalchemy.Используя отражения, я хотел бы запросить такую ​​базу данных, но есть проблема.Таблица называется «logs» и имеет два внешних ключа, оба ссылаются на таблицу «server».Табличный сервер имеет столбец с именем 'class', и это имя ограничено в python.

Код:

from sqlalchemy import orm, create_engine
from sqlalchemy.ext.automap import automap_base
from django.conf import settings


base = automap_base()

connection_setup = (
    "{driver}://{user}:{password}@{host}:{port}/{dbname}".format(
        **settings.ALCHEMY_DB))

engine = create_engine(connection_setup, echo=False)

base.prepare(engine, reflect=True)

scoped_session = orm.scoped_session(orm.sessionmaker(bind=engine))

session = scoped_session()

logs = base.classes.logs
server = base.classes.server

local_server = orm.aliased(server, name='local_server')
remote_server = orm.aliased(server, name='remote_server')

query = (
    session
    .query(
        logs, local_server.class, remote_server.class)
    .outerjoin(
        local_server, logs.local_server_id == local_server.id
    )
    .outerjoin(
        remote_server, logs.remte_server_id == remote_server.id
    )
)

rows = query.all()

Исключение:

  File "ff.py", line 29
      logs, local_server.class, remote_server.class)
                                              ^
SyntaxError: invalid syntax

Как решить эту проблему?

1 Ответ

2 голосов
/ 29 апреля 2019

Вероятно, самое простое решение:

getattr(local_server, 'class')

В качестве альтернативы должна быть возможность явно переопределить столбец:

https://docs.sqlalchemy.org/en/13/orm/extensions/automap.html#specifying-classes-explicitly

Попробовал и протестировал оба из них.

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