我有一个简单的问题。在我的表中有列ID,NAME,CONTENT,TIMESTAMP。如果我使用session.query(table).all()result是表类对象的数组。所以我修改一个或多个对象并更新没有问题,或者在关联中使用这个对象。但我只需要列ID和NAME。如果使用session.query(table.id,table.name),我得到带有id和name的结果元组。使用这个元组更新它 - 也许 - 很容易,但代码它是......丑陋的。在协会中也一样。如果我只想要ID进行关联,那就是不必要的数据库加载。
到目前为止,我使用简单的代码来获取仅查询指定列的表类对象数组:
for row in session.query(table.id, table.name).all():
data.append(table(id=row.id, name=row.name))
它使更新变得容易,但在关联中使用很复杂。例如,我的代码中的表对象数组中有10行。我希望关联1行到table2
如果我使用:
session.add(table2(name = 'test', association = data[1]))
并承诺,
sqlalchemy想要创建新的table2行,新的关联表行和新的表行(第一行,与table2相关联)。
有没有办法将结果作为表对象的数组,而不是元组,使用指定的列,如果make query(table),返回的对象是否相同?
对不起我的英语,我从来没用它来描述复杂的问题,直到现在。
答案 0 :(得分:0)
如果要减少使用.query(Table)
从db加载的列数,从而减少开销,您可能希望在定义关系时尝试推迟不需要的列。说id
和name
对您的更新至关重要,info
不是,您可以告诉映射器推迟info
:
mapper(Class, table, properties={
"info":column_property(table.c.info, deferred=True),
... other properties ....
})
因此,当您执行session.query(Class)
时,将不会选择信息。只有在您拥有obj.info
的代码中的某个地方,即显式调用此属性时,才会调用它。