2010-09-01 27 views
15

我知道如何在模型上查詢現在。假設有一個Question模式:如何在sqlalchemy中查詢表格

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

是OK。

filter_by只適用於型號?我如何在表格上查詢?

回答

20

我認爲這是Session.query(questions).filter(questions.c.user_id==123).one()

+20

是否有任何通過表查詢文檔? – JRodDynamite 2014-06-21 05:01:31

+1

選擇直接暴露在表上;花了我一些時間來弄清楚:[Table.select](http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.select) – chris 2016-08-19 14:23:09

4

可以查詢被使用Session.query(Base.metadata.tables['myTable']).all()表構造函數創建表。