2010-09-01 40 views
15

Tôi biết cách truy vấn trên mô hình ngay bây giờ. Giả sử có một mô hình Question:Cách truy vấn bảng, trong sqlalchemy

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

Bây giờ, tôi có thể làm:

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

Nhưng, bây giờ, tôi có một bảng (không phải là một mô hình) questions:

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

thế nào để truy vấn nó như những gì tôi làm với các mô hình?

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

này sẽ báo cáo một lỗi:

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' 

Nhưng:

Session.query(questions).all() 

là OK.

Có phải filter_by chỉ hoạt động đối với các kiểu máy không? Làm thế nào tôi có thể truy vấn trên bảng?

Trả lời

20

Tôi nghĩ đó là Session.query(questions).filter(questions.c.user_id==123).one()

+20

Có tài liệu nào để truy vấn qua bảng không? – JRodDynamite

+1

Chọn được hiển thị trực tiếp trên Bảng; đã cho tôi một chút để tìm ra: [Table.select] (http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.select) – chris

4

Bạn có thể truy vấn bảng đã được tạo ra với các nhà xây dựng Bảng sử dụng Session.query(Base.metadata.tables['myTable']).all().

Các vấn đề liên quan