我在申请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
答案 0 :(得分:15)
我遇到了类似的问题。
我在这里经历了几乎所有可能的修复,并通过无数的谷歌搜索,没有运气。
我查看了数据库模式,我没有创建名为'ROLLBACK_TEST'的表是模式的一部分。
一旦我删除了那个神秘的表,迁移就完美无缺。
此表只能通过Django,South或可能是亚马逊的内部流程发起,因为没有其他任何人可以访问。
答案 1 :(得分:4)
我在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 :(得分:3)
我遇到了同样的问题,并且正在敲打我的脑袋一段时间。 事实证明我的(MySQL)数据库用户没有足够的权限。 我分配了:ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT,UPDATE给用户,一切正常。
答案 3 :(得分:1)
我遇到了同样的问题,对我而言,解决方案只是将我的sqlite development.db
文件的正确权限授予正在执行python manage.py migrate webapp
命令的用户。我拥有www-data
拥有的文件,因此无法处理该文件。
答案 4 :(得分:0)
我正在为我所遇到的问题写出答案,因为它对某些人有用。
经过一段时间的调试后,我发现问题与django无关。这是数据库和托管它的虚拟机的问题。
我重新启动了数据库计算机,现在正在进行迁移。
答案 5 :(得分:0)
当我遇到同样的问题时,我的问题或多或少与django有关。我解释一下。
我正在使用控制台中的不同标签。一个与django shell一起用于测试我的模型,在另一个选项卡中我运行迁移。我在shell选项卡中遇到了完整性错误。因此,在我解决问题(see this thread)或关闭选项卡之前,迁移选项卡中的错误仍然存在。正如前面的回答所指出的那样,这与DB有关 - 但不是DB的错误。