Python django数据库插入未被拾取
我们的设置有点复杂: 在我们的普通代码中,我们手动连接到mysql数据库。我们这样做是因为我想django通常使用的连接不是线程安全的?因此,我们让django建立连接,从中提取信息,然后使用mysqldb连接进行实际查询 我们的代码主要是一个更新过程,所以我们关闭了自动提交以节省时间 为了便于创建测试数据,我创建了表示表的django模型,并使用它们创建要测试的行。所以我有如下功能:Python django数据库插入未被拾取,python,mysql,django,django-models,transactions,Python,Mysql,Django,Django Models,Transactions,我们的设置有点复杂: 在我们的普通代码中,我们手动连接到mysql数据库。我们这样做是因为我想django通常使用的连接不是线程安全的?因此,我们让django建立连接,从中提取信息,然后使用mysqldb连接进行实际查询 我们的代码主要是一个更新过程,所以我们关闭了自动提交以节省时间 为了便于创建测试数据,我创建了表示表的django模型,并使用它们创建要测试的行。所以我有如下功能: def make_thing(**overrides): fields = deepcopy(DEFA
def make_thing(**overrides):
fields = deepcopy(DEFAULT_THING)
fields.update(overrides)
s = Thing(**fields)
s.save()
transaction.commit(using='ourdb')
reset_queries()
return s
然而,它似乎并不是真正的承诺!在创建对象之后,我将获得针对mysqldb连接执行原始sql的代码:
def get_information(self, value):
print self.api.rawSql("select count(*) from thing")[0][0]
query = 'select info from thing where column = %s' % value
return self.api.rawSql(query)[0][0]
此打印语句打印0!为什么?
此外,如果我关闭自动提交,我会
TransactionManagementError:当“原子”块处于活动状态时,这是禁止的。
当我们稍后尝试更改自动提交级别时
编辑:我也试过了,但没用
EDIT2:我从一个shell检查了数据库——提交正在工作,只是没有被接收。我尝试过设置事务隔离级别,但没有帮助。我应该补充一点,从get_information向上的一个函数使用这个decorator:
def single_transaction(fn):
from django.db import transaction
from django.db import connection
def wrapper(*args, **kwargs):
prior_autocommit = transaction.get_autocommit()
transaction.set_autocommit(False)
connection.cursor().execute('set transaction isolation level read committed')
connection.cursor().execute("SELECT @@session.tx_isolation")
try:
result = fn(*args, **kwargs)
transaction.commit()
return result
finally:
transaction.set_autocommit(prior_autocommit)
django.db.reset_queries()
gc.collect()
wrapper.__name__ = fn.__name__
return wrapper
必须是Mysql吗?我知道MySql不支持事务。这里有一些文章:。如果不需要mysql,请尝试使用postgres:)mysql是必需的。这是生产软件,我们不能就这样更改数据库。您可以在提交后创建mysqldb连接吗?