Python SQL Alchemy如何通过排除选定的列进行查询

时间:2014-05-12 03:36:44

标签: python sqlalchemy flask-sqlalchemy

我基本上只需要知道如何通过排除选定的列进行查询。这可能吗?

示例:我的桌子上有身份证,姓名,年龄,地址,地点,出生年龄,性别等等。

我想要排除查询中的某些列(例如,排除年龄),而不是引用要检索的列。

示例代码:

db.session.query(User.username).filter_by(username = request.form['username'], password = request.form['password']).first()

我想做的最后一件事是列出query()方法的所有属性,因为这会很长,特别是当你有很多属性时,我只想排除一些列。

2 个答案:

答案 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()