我基本上只需要知道如何通过排除选定的列进行查询。这可能吗?
示例:我的桌子上有身份证,姓名,年龄,地址,地点,出生年龄,性别等等。
我想要排除查询中的某些列(例如,排除年龄),而不是引用要检索的列。
示例代码:
db.session.query(User.username).filter_by(username = request.form['username'], password = request.form['password']).first()
我想做的最后一件事是列出query()方法的所有属性,因为这会很长,特别是当你有很多属性时,我只想排除一些列。
答案 0 :(得分:6)
不确定为什么你不只是拿取模型。这样做时,您可以推迟加载某些列,以便仅在访问时查询它们。
db.session.query(User).options(db.defer('location')).filter_by(...).first()
在此示例中,第一次在实例上访问User.location
将发出另一个查询来获取数据。
请参阅有关列延期的文档:http://sqlalchemy.readthedocs.org/en/rel_0_9/orm/mapper_config.html?highlight=defer#column-deferral-api
请注意,除非您正在加载大量数据,否则您将看不到任何加速。它实际上可能会使事情变慢,因为稍后会发出另一个查询。我有一些查询在不到200毫秒的时间内加载了数千行的热切加载关系,所以这可能是一个过早优化的情况。
答案 1 :(得分:0)
我不知道直接执行此操作的方法,但您始终可以获取列键,排除列,然后调用结果列表。在执行此操作时,您无需查看列表中的内容。
q = db.session.query(blah blah...)
exclude = ['age']
targ_cols = [x for x in q.first().keys() if x not in exclude]
q.with_entities(targ_cols).all()