Как запросить таблицу, в sqlalchemy - PullRequest
19 голосов
/ 01 сентября 2010

Теперь я знаю, как запросить модель. Предположим, есть модель Question:

class Question(Base):
    __tablename__ = "questions"
    id=Column(...)
    user_id=Column(...)
    ...

Теперь я могу сделать:

question = Session.query(Question).filter_by(user_id=123).one()

Но теперь у меня есть таблица (не модель) questions:

questions = Table('questions', Base.metadata,
                  Column(id, ...),
                  Column(user_id, ...),
                  ....)

Как запросить то, что я делаю с моделями?

Session.query(questions).filter_by(user_id=123).one()

Это сообщит об ошибке:

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "E:\Python27\lib\site-packages\sqlalchemy-0.6.3-py2.7.egg\sqlalchemy\orm\query.py", line 851, in filter_by
  for key, value in kwargs.iteritems()]
File "E:\Python27\lib\site-packages\sqlalchemy-0.6.3-py2.7.egg\sqlalchemy\orm\util.py", line 567, in _entity_descriptor
    desc = entity.class_manager[key]
AttributeError: 'NoneType' object has no attribute 'class_manager'

Но:

Session.query(questions).all()

в порядке.

filter_by работает только для моделей? Как я могу запросить таблицы?

Ответы [ 2 ]

24 голосов
/ 01 сентября 2010

Я думаю, что это Session.query(questions).filter(questions.c.user_id==123).one()

8 голосов
/ 13 января 2016

Вы можете запросить таблицы, созданные с помощью конструктора таблиц, используя Session.query(Base.metadata.tables['myTable']).all().

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