如何复制SQLAlchemy查询对象?

时间:2015-10-20 05:30:02

标签: python sqlalchemy

我尝试过copy.deepcopy,但是收到此错误:   文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py”,第93行, newobj     return cls。 new (cls,* args) TypeError:object。 new (psycopg2._psycopg.type)不安全,请使用psycopg2._psycopg.type。 new ()

为什么要复制?因为我有两个我想要运行的查询几乎相同但不完全相同。我已经应用了六个相同的过滤器,现在我想应用一个过滤器,执行它,然后“回滚”并应用另一个过滤器并执行它。

我尝试使用pickle和unpickling作为解决方法,但pickle不适用于函数对象。

1 个答案:

答案 0 :(得分:2)

每当您添加.filter()或类似的查询时,它都会返回查询的副本。请参阅此处的文档:http://docs.sqlalchemy.org/en/rel_0_8/orm/query.html#sqlalchemy.orm.query.Query.filter

我想你可以在你的情况下使用这个功能:

query = session.query(Customer)
main_query = query.filter(Customer.size > 150)
query1 = main_query.filter(Customer.age > 50)
query2 = main_query.filter(Customer.age < 30)

query1会返回所有大于150且大于50的客户

query2会返回所有大于150且小于30的客户