Fre*_*ind 10 python sqlalchemy insert-update
我使用sqlalchemy作为我的orm,并declarative用作Base.
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何知道用户已被修改,以及如何在没有查询数据库的情况下再次获取原始值?
user = Session.query(User).filter_by(id=user_id).first()
# some operations on user
....
# how do I know if the user.name has been changed or not?
...
# How do get the original name?
Run Code Online (Sandbox Code Playgroud)
提前致谢!
UPDATE
我发现一个方法get_history可以得到一个字段的历史值,但我不确定它是否是我的目的的正确方法.
from sqlalchemy.orm.attributes import get_history
user = Session.query(User).first()
print user.name # 'Jack'
print get_history(user, 'name') # ((),['Jack'],())
user.name = 'Mike'
print get_history(user, 'name') # (['Mike'], (),['Jack'])
Run Code Online (Sandbox Code Playgroud)
那么,我们可以检查一下它的价值get_history,但这是最好的方法吗?
aar*_*ing 11
\要查看是否user已修改,您可以检查是否user in session.dirty.如果是,并且您想撤消它,则可以执行
session.rollback()
Run Code Online (Sandbox Code Playgroud)
但请注意,这会将会话的所有内容回滚到最后session.commit().
如果你想获得原始值并且内存正确地为我服务,那么它是sqlalchemy.orm.attributes.get_history实用程序函数返回的元组的第二个元素.你必须这样做
old_value = sqlalchemy.orm.attributes.get_history(user, 'attribute')[2]
Run Code Online (Sandbox Code Playgroud)
对于您想要的每个属性.
| 归档时间: |
|
| 查看次数: |
3772 次 |
| 最近记录: |