【发布时间】:2013-12-17 22:42:54
【问题描述】:
来自官方文档的示例
from django.db import connection
def my_custom_sql(self):
cursor = connection.cursor()
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
如果更新会影响选择,例如
cursor.execute("UPDATE bar SET foo = foo + 1 WHERE baz = %s", [self.baz])
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
事务是否适用于原始 SQL,就像这个 snap 代码一样有效?
from django.db import connection, transaction
def my_custom_sql(self):
try:
with transaction.atomic():
cursor = connection.cursor()
cursor.execute("UPDATE bar SET foo = foo + 1 WHERE baz = %s", [self.baz])
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
except IntegrityError:
transaction.rollback()
或者对于第一个代码,begin cursor已经开始一个事务?
【问题讨论】:
标签: python sql django django-models mysql-python