Đừng xác định việc lập bản đồ cho các cột mà bạn muốn tải theo yêu cầu. Sau đó, cấu hình chúng như được mô tả trong các Deferred Column Loading sử dụng đối tượng mapper
. Đổi mã ở đây:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class SomeClass(Base):
__tablename__ = 'some_table'
id = Column(Integer, primary_key=True)
name = Column(String(50))
#big_name = Column(String(500))
SomeClass.__table__.append_column(Column('big_name', String(500)))
SomeClass.__mapper__.add_property('big_name', deferred(SomeClass.__table__.c.big_name))
Chạy mã kiểm tra này:
c = session.query(SomeClass).first()
# here SQL is loading all configured properties, but big_name
print "c: ", c
# only here another SQL request is made to load the property
print "big_name: ", c.big_name
sản xuất bản ghi trích:
... INFO sqlalchemy.engine.base.Engine.0x...77d0 SELECT some_table.id AS some_table_id, some_table.name AS some_table_name
FROM some_table
LIMIT 1 OFFSET 0
... INFO sqlalchemy.engine.base.Engine.0x...77d0 SELECT some_table.big_name AS some_table_big_name
FROM some_table
WHERE some_table.id = ?
là gì những lý do bạn có thể muốn o trì hoãn tải? Bạn có sẵn sàng thay đổi lược đồ Mô hình hoặc DB để làm cho nó hoạt động không? – van