kja*_*llo 7 python mysql sqlalchemy
我在不是Web应用程序的项目中使用SQLAlchemy.它是一个服务器应用程序,它从数据库加载许多不同的对象并在本地修改它们,但是每次发出提交时都不希望将这些更新保存到数据库中.我以前和Django ORM合作过一些网络项目,发现它更适合我想要实现的目标.在Django ORM中我可以随时随地使用.save()每个对象而不保存其他我可能不想保存的东西.我理解为什么它在SQLAlchemy中的工作方式如此,但我想知道如何以类似Django的方式做到这一点?
更新: 为了更容易理解我想要实现的目标,我将为您提供一个示例.
这是它实际工作的方式:
a = MyModel.query.get(1)
b = MyModel.query.get(1)
a.somefield = 1
b.somefield = 2
# this will save both of changed models
session.commit()
Run Code Online (Sandbox Code Playgroud)
这就是我希望它的工作方式:
a = MyModel.query.get(1)
b = MyModel.query.get(1)
a.somefield = 1
b.somefield = 2
a.save()
# I didn't want to save b, changes of b weren't committed
Run Code Online (Sandbox Code Playgroud)
我想更好地控制实际保存的内容.我想每5分钟左右保存每个对象的更改.
我用类似的东西:
class BaseModel(object):
def save(self, commit=True):
# this part can be optimized.
try:
db.session.add(self)
except FlushError:
# In case of an update operation.
pass
if commit:
db.session.commit()
def delete(self, commit=True):
db.session.delete(self)
if commit:
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
然后我将模型定义为:
class User(db.Model, BaseModel)
Run Code Online (Sandbox Code Playgroud)
所以,现在我可以这样做:
u = User(username='foo', password='bar')
u.save()
Run Code Online (Sandbox Code Playgroud)
这就是您计划实现的目标吗?
归档时间: |
|
查看次数: |
2163 次 |
最近记录: |