如何复制 SQLAlchemy 查询对象?

jwo*_*oww 4 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) 类型错误:对象。new (psycopg2._psycopg.type) 不安全,请使用 psycopg2._psycopg.type。()

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

我尝试过酸洗和取消酸洗作为一种解决方法,但酸洗不适用于函数对象。

小智 5

每当您添加 .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)
Run Code Online (Sandbox Code Playgroud)

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

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