Drachenfels
Drachenfels

Reputation: 3286

Sqlalchemy and restricted keywords of python

Pre-existing db and sqlalchemy. Using reflections I would like to query such database, but there is a problem. Table is called 'logs' and it has two foreign keys both referring table 'server'. Table server has column called 'class' and that name is restricted in python.

Code:

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()

Exception:

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

How to approach such problem?

Upvotes: 1

Views: 1457

Answers (1)

Drachenfels
Drachenfels

Reputation: 3286

Probably the easiest solution:

getattr(local_server, 'class')

Alternatively it should be possible to explicitly override column:

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

Tried and tested both of them.

Upvotes: 3

Related Questions