陷入 django 南迁移 - TransactionManagement 错误

Posted

技术标签:

【中文标题】陷入 django 南迁移 - TransactionManagement 错误【英文标题】:Stuck in a django south migration - TransactionManagement error 【发布时间】:2013-08-28 19:41:39 【问题描述】:

我在应用 django 南迁移时遇到问题:

和往常一样,我在模式迁移成功后执行了 migrate 命令

python manage.py migrate webapp

日志控制台:

Running migrations for webapp:
 - Migrating forwards to 0020_auto__add_example.
 > webapp:0020_auto__add_example
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK

该错误与特定迁移无关,好像我向后移动并尝试另一个它显示相同的消息。

编辑。这是查询的日志:

(0.005) SELECT `south_migrationhistory`.`id`, `south_migrationhistory`.`app_name`, `south_migrationhistory`.`migration`, `south_migrationhistory`.`applied` FROM `south_migrationhistory` WHERE `south_migrationhistory`.`applied` IS NOT NULL ORDER BY `south_migrationhistory`.`applied` ASC; args=()
Running migrations for webapp:
 - Migrating forwards to 0020_auto__add_example.
 > webapp:0020_auto__add_example
(0.002) CREATE TABLE ROLLBACK_TEST (X INT); args=()
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK

【问题讨论】:

您可以启用 sql 日志记录并在此处附加结果吗? coderwall.com/p/uzhyca @tuxcanfly,我已经添加了。 谢谢 tuxcanfly。至少我学会了如何在执行 django 查询时记录数据库。 【参考方案1】:

我在 mysql 实例上使用 Django 1.6 和 South 1.0 时遇到了同样的问题。打开 django.db.backends 记录器后,我意识到迁移卡在以下 SQL 语句上:

DEBUG (0.003) CREATE TABLE ROLLBACK_TEST (X INT); args=None

所以我检查了数据库,果然找到了 ROLLBACK_TEST 表。删除它解决了问题:

$ manage.py dbshell
mysql> DROP TABLE ROLLBACK_TEST;

【讨论】:

【参考方案2】:

当我遇到同样的问题时,我的问题或多或少与 django 有关。我解释一下。

我在控制台中使用不同的选项卡。一个与 django shell 一起使用来测试我的模型,并在另一个选项卡中运行迁移。我在 shell 选项卡中遇到了完整性错误。因此,直到我解决了问题 (see this thread) 或关闭了选项卡,迁移选项卡中的错误仍然存​​在。正如前一个答案所指出的,这与数据库有关,但与数据库无关。

【讨论】:

【参考方案3】:

我刚刚遇到了类似的问题。

MySQL 5.6.13(在 Amazon RDS 上) Django==1.5.4 MySQL-python==1.2.4 南==0.8.2

我在这里完成了几乎所有可能的修复以及无数次谷歌搜索,但运气为零。

我查看了数据库架构,我没有创建名为“ROLLBACK_TEST”的表是架构的一部分。

一旦我删除了那个神秘表,迁移就会完美运行。

此表只能源自 Django、South 或 Amazon 的内部进程,因为没有其他人可以访问。

【讨论】:

我遇到了同样的问题。我中止了迁移,ROLLBACK_TEST 是留在数据库中的表。放下那张桌子告诉 South 一切正常。 请注意,如果您的数据库用户没有删除权限,您可能会遇到此问题【参考方案4】:

我也遇到了同样的问题,头疼了一阵子。 事实证明我的(MySQL)数据库用户没有足够的权限。 我为用户分配了:ALTER、CREATE、DELETE、DROP、INDEX、INSERT、SELECT、UPDATE,一切正常。

【讨论】:

【参考方案5】:

我遇到了同样的问题,对我来说,解决方案只是将我的 sqlite development.db 文件的正确权限授予正在执行 python manage.py migrate webapp 命令的用户。我拥有www-data 拥有的文件,因此无法处理该文件。

【讨论】:

【参考方案6】:

我正在写我遇到的问题的答案,因为它可能对某人有用。

经过一段时间的调试,我发现问题与django无关。这是数据库和托管它的虚拟机的问题。

我重新启动了数据库机器,现在迁移工作正常。

【讨论】:

以上是关于陷入 django 南迁移 - TransactionManagement 错误的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.7 内置迁移与南迁移?

测试使用南迁移的 Django 应用程序

使用南(django)和 MySQL 进行模式迁移

Django 南迁移 - 添加 FULLTEXT 索引

南迁移错误:django.contrib.auth 的 NoMigrations 异常

如何在南迁移期间调用 django 模型类的静态方法