oll*_*leh 2 python sqlalchemy flask-sqlalchemy
我基本上只需要知道如何通过排除选定的列进行查询.这可能吗?
示例:我的桌子有id,姓名,年龄,地址,位置,出生年龄,性别......等.
我想要排除查询中的某些列(例如,排除年龄),而不是引用要检索的列.
示例代码:
db.session.query(User.username).filter_by(username = request.form['username'], password = request.form['password']).first()
Run Code Online (Sandbox Code Playgroud)
我想做的最后一件事是列出query()方法的所有属性,因为这将是非常长的,特别是当你有很多属性时,因此我只想排除一些列.
不知道为什么你不只是取得模型.这样做时,您可以推迟加载某些列,以便仅在访问时查询它们.
db.session.query(User).options(db.defer('location')).filter_by(...).first()
Run Code Online (Sandbox Code Playgroud)
在此示例中,User.location第一次访问实例将发出另一个查询以获取数据.
请参阅有关列延期的文档:http://sqlalchemy.readthedocs.org/en/rel_0_9/orm/mapper_config.html?highlight = defer #column-deferral-api
请注意,除非您正在加载大量数据,否则您将看不到任何加速.它实际上可能会使事情变慢,因为稍后会发出另一个查询.我有一些查询在不到200ms的时间内加载了数千行与切换加载的关系,所以这可能是一个过早优化的情况.
dmv*_*nna -1
我不知道有直接执行此操作的方法,但您始终可以获取列键,排除列,然后调用结果列表。执行此操作时,您不需要查看列表中的内容。
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()
Run Code Online (Sandbox Code Playgroud)