我继承了一些为django1.4编写的应用程序的代码。 我们需要更新代码库,以便与django1.7一起使用,并最终将1.8作为下一个长期支持版本。在
在一些地方,它使用旧样式@transaction.commit_manually
和{
一般来说,我对事务的了解还不够,但我正试图了解它们的用途,因此我可以删除它们(如果不需要),或者将它们升级到更新的set_autocommit(False)
或等效版本。在
我了解到Django<;1.5中的事务管理并不理想,对于大多数用例来说过于复杂。在
数据库连接如下所示,没有特殊的事务管理。(使用Postgres 9.3)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'dbname',
'USER': 'user',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '',
}
}
没有专门的事务中间件。在
我觉得下面的观点特别令人费解。(已编辑)
^{pr2}$其中initialize_xml_model
是一个接受平面xml文件(xml模型模板)并创建新XMLModel对象的函数。并且insert_user_info
将存储在用户对象中的信息插入到xml模型中。在
我读代码的方式是
commit_manually
关闭autocommit
transaction.commit()
如果没有错误,则将其存储到数据库中。在model
是否是unicode实例,然后对其进行编码(我不确定这到底是做什么的)model
实例化XMLManipulator对象model
(tostring
是一个保留样式表声明的xml操纵器方法)在xml
对象5点以后。唯一处理db(在read中)的是insert_user_info方法。在
我真的不明白为什么这会发生在一个特殊的交易中。没有给数据库写信?在
此视图上没有其他方法,只有get。在
我可能漏掉了一些重要的东西,请随时提问或了解更多信息。在
这里的事务真的是必需的吗?如果是的话,如何重写它以适应新的transaction.set_autocommit
?在
任何帮助或建议将不胜感激。在
一个很好的方法是使用事务处理.atomic. 在你的例子中,我会这样做:
相关问题 更多 >
编程相关推荐