如果我这样做,Sqlalchemy 会跟踪所有更改并提交到数据库:
b = this_session.query(BaseUrl).filter_by(id=value).first()
b.basevalue = "new_value" #changing
this_session.commit() #commit the change to the DB
这很好用。
但是,如果我使用这个:
proxy = this_session.execute("select * from base_url where id = {0}".format(value))
b = create_base_url(proxy) #create an instance of BaseUrl from proxy!
b.basevalue = "new_value" #changing
this_session.commit() #it does NOT commit the change to the DB
当然,问题与create_base_url()
. 在这个函数中,我只是BaseUrl
通过传递从 中获取的各种参数proxy
并返回它来创建一个实例。this_session
为了跟踪对象中的所有更改,我不做任何其他事情。我需要这样的功能:
this_session.attach(b) #keep track of changes in b
以便跟踪b
.
我应该如何实现这样的功能?如果我有相反的情况也很好:
this_session.detach(b) #don't keep track of changes in b
我正在使用postgresql 9.2
和sqlalchemy 0.9.0
。
除了一些帮助之外,一个指向文档的链接——处理这个问题的部分——会很棒,所以我可以详细阅读它。:-)