2015-10-20 105 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