Django 测试失败:内部错误:没有此保存点。数据库:Postgres,MySQL 通过

5 投票
1 回答
645 浏览
提问于 2025-04-15 15:39

有趣的是,这个在命令行也能用。

   [MY code which calls Model.objects.get_or_create(...)]
  File "/usr/lib/python2.5/site-packages/django/db/models/manager.py", line 123, in get_or_create
    return self.get_query_set().get_or_create(**kwargs)
  File "/usr/lib/python2.5/site-packages/django/db/models/query.py", line 308, in get_or_create
    transaction.savepoint_rollback(sid)
  File "/usr/lib/python2.5/site-packages/django/db/transaction.py", line 199, in savepoint_rollback
    connection._savepoint_rollback(sid)
  File "/usr/lib/python2.5/site-packages/django/db/backends/__init__.py", line 67, in _savepoint_rollback
    self.cursor().execute(self.ops.savepoint_rollback_sql(sid))
InternalError: no such savepoint

1 个回答

3

如果你想测试使用事务的代码,你需要创建一个新的类,继承自 TransactionTestCase,而不是直接用 TestCase

比如:

from django.test import TransactionTestCase

class MyTests(TransactionTestCase):
    ...

这段代码在 MySql 中可能会通过测试,因为你使用的是 MyISAM 表,而这种表是不支持事务的。

撰写回答