Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django w/MySQL非事务性更改表无法';不要退缩_Python_Mysql_Django_Csv_Transactions - Fatal编程技术网

Python Django w/MySQL非事务性更改表无法';不要退缩

Python Django w/MySQL非事务性更改表无法';不要退缩,python,mysql,django,csv,transactions,Python,Mysql,Django,Csv,Transactions,使用MySQL数据库不断获取此警告: 无法回滚某些非事务性更改表 我不确定这意味着什么,或者它是否引起了问题,但我希望有人能告诉我这意味着什么 我正在获取一个CSV文件,逐行读取它,并使用get\u或\u create创建Django对象。在我收到消息后,当我尝试重新创建它时,我会在警告出现之前进一步进入CSV文件 我试着在网上阅读这个错误,但我真的不明白它的意思。最好能找出造成这种情况的原因,但如果我不能,我想知道是否可以抑制警告,因为它可能不会对我的数据库产生负面影响。当您混合使用事务性和非

使用MySQL数据库不断获取此警告:

无法回滚某些非事务性更改表

我不确定这意味着什么,或者它是否引起了问题,但我希望有人能告诉我这意味着什么

我正在获取一个CSV文件,逐行读取它,并使用
get\u或\u create
创建Django对象。在我收到消息后,当我尝试重新创建它时,我会在警告出现之前进一步进入CSV文件


我试着在网上阅读这个错误,但我真的不明白它的意思。最好能找出造成这种情况的原因,但如果我不能,我想知道是否可以抑制警告,因为它可能不会对我的数据库产生负面影响。

当您混合使用
事务性
非事务性
表时,会发生这种情况。对非事务表的更改不受
ROLLBACK
语句的影响

出于某些原因,这可能发生在您身上,我们可以求助于:

如果您没有故意在事务中混合事务表和非事务表,那么产生此消息的最可能原因是您认为是事务表的表实际上不是事务表。如果您尝试使用mysqld服务器不支持的事务存储引擎(或使用启动选项禁用的事务存储引擎)创建表,则可能会发生这种情况。如果mysqld不支持存储引擎,它会将该表创建为MyISAM表,这是非事务性的


如果您说有一个
HTTP
请求触发了一个事务,您进行了一些更改,并且需要回滚,那么这将对事情产生负面影响。事务表将回滚,但其他表不会回滚。如果事务存储引擎是对您的软件的要求,您应该考虑将所有相关表迁移到<代码> IDNBD引擎。

< P>我在从另一个Django应用程序导入表之后发生了这个错误。源数据库将所有表引擎设置为MyISAM,目标应用程序将所有引擎设置为InnoDB。当我导入现有表时,引擎从InnoBD更改为MyISAM以匹配源。我在命令行上使用MySQL解决了这个问题,如下所示:

$ mysql -uroot -pPASSWORD
> use MY_DB;
> show table status;
> alter table TABLE_WITH_MYISAM engine=innodb;
> quit;
我已经导入了5个表,所以我必须为每个表执行alter命令。上面的show命令将打印MY_DB中所有表的表名和引擎设置


我希望这有助于解决您的问题!干杯

您的表使用什么db/引擎?MySQL。。。djando.db.backends.mysql您知道表使用的是什么引擎吗?innodb/myisam?记住,它是一个表一个表的。我有MySQL v5.1.61,所以我认为说我有myisam是安全的。。。如果这不是一个安全的假设,请纠正我这与使用
get\u或\u create()
VS.
try:get()有关吗。。。预期DoesNotExist:。。。save()
no这与DBMS中的表引擎有关。假设您的模型具有一些将
innoDB
连接到
myiasm
表的关系,这将导致您看到此错误。它直接来自于
DBMS
它是一个
MySQL
错误,而不是
Django
有没有办法阻止这种情况发生?我的脚本正在使用get_或_create()执行大量数据库事务。我可以做些什么来防止这个异常发生吗?将try中出现的位置进行包装会是一种不好的做法吗?您可以通过在应用程序的设置中将
AUTOCOMMIT
设置为
False
来禁用django的事务行为。然后,您必须自己管理事务边界。或者,您可以阅读我所说的,您正在混合事务性/非事务性资源。清点您的表,找出哪一个是问题所在,并将其从事务操作中排除。