起因
使用python的sqlalchemy库进行ORM数据模型操作。查询得出 model
对象,然后对数据进行更新,期间没有显式更改 model
的操作,但最终 model
数据对象被更新。导致后续业务判断出错。
伪代码如下:
from models import Product
......
if model:
print(model.quantity) # 101
db_session.query(Product).filter(Product.id == model.id).update({"quantity":233})
print(model.quantity) # 233
解决
使用 copy.copy()
方法拷贝对象。
更正如下
from models import Product
from copy import copy
if model:
print(model.quantity) # 101
model_before = copy(model)
db_session.query(Product).filter(Product.id == model.id).update({"quantity":233})
print(model.quantity) # 233
print(model_before.quantity) # 101