【发布时间】:2019-06-05 18:25:03
【问题描述】:
我正在使用 SQLAlchemy 和 load_only 选项。
在我阅读load_only 文档后,我希望如果我使用load_only,我可以获得一些指定的列。但结果并非如此。有所有的列,而不是一些列。我不知道为什么。你能给我一些建议吗?
ps。我需要行实体,所以我不使用这样的查询:
session.query(table.columnA, table.columnB)
我正在使用 SQLAlchemy 1.3.4
class Language(Base):
__tablename__ = 'language'
IDX = Column(INTEGER(11), primary_key=True)
DH_INDEX = Column(ForeignKey('dryhop.DH_INDEX', ondelete='CASCADE', onupdate='CASCADE'), index=True)
EP_INDEX = Column(ForeignKey('expendables.EP_INDEX', ondelete='CASCADE', onupdate='CASCADE'), index=True)
LANG_CLASS = Column(String(20), nullable=False)
LANG_NATION = Column(String(15), nullable=False)
LANG_COMMENT = Column(Text)
UPDATE_TIME = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"))
query= session.query(db_model.Language).options(load_only("LANG_COMMENT", "LANG_NATION"))
dir(query.first()) # 'DH_INDEX', 'EP_INDEX', 'IDX','LANG_CLASS', 'LANG_COMMENT', 'LANG_NATION', 'UPDATE_TIME'... ETC
dir(query.first()) 时,我预计只有两列
'LANG_COMMENT', 'LANG_NATION')
但结果是
'DH_INDEX', 'EP_INDEX', 'IDX','LANG_CLASS', 'LANG_COMMENT', 'LANG_NATION', 'UPDATE_TIME'
【问题讨论】:
-
SQLA 模型不实现
__dir__,因此名称以通常的方式收集。结果没有任何异常。 -
@Ilja Everilä 谢谢回答!所以你的意思是 load_only 查询返回所有未指定列的列,对吗?但我知道 load_only 只返回一些列。在那个查询中,我可以得到值,query.DH_INDEX .. 这是对的吗?我希望只有两列的值
-
@Ilja Everilä 我检查了选择查询是否不同(使用 sqlalchmy echo =True)。我还检查了你的答案(stackoverflow.com/questions/50317889/…)。如果是这样,普通查询和 load_only 查询有什么区别?,我阅读了文档,但我无法使用 load_only 选项获得任何好处。非常感谢 Ilja Everilä。上次你帮了我。我很感激。
标签: python sqlalchemy