2015-10-20 111 views
1

我试过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。 (psycopg2._psycopg.type)不安全,请使用psycopg2._psycopg.type。 ()如何复制SQLAlchemy查询对象?

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

我尝试了酸洗和拆除作为解决方法,但pickle在函数对象上不起作用。

回答

1

无论何时添加.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的顾客

+0

嗯,我正在做这些事情,但是我收到一个错误,提示它仍然引用原始查询对象。当然,出于某种原因,尽管花费了半小时的时间进行调试,但我现在无法复制它。 – jwoww

+0

找到我的问题。开发者错误。 * facepalm * – jwoww

+0

超链接似乎现在更新,新的文档可以在这里找到:http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.filter – Greg0ry