如何在Django unittest中运行原始SQL查询?
我发现如果使用cursor,它似乎打破了unittest的事务,因此在单元测试结束时不会恢复对Sqlite数据库的任何更改。
我的unittest看起来像:
class Tests(TestCase):
def test_first(self):
print('FIRST:', MyModel.objects.all().count())
cursor = connection.cursor()
try:
cursor.execute('SELECT * FROM myapp_mymodel;')
r = cursor.fetchone()
finally:
cursor.close()
MyModel.objects.create(name='abc')
def test_second(self):
print('SECOND:', MyModel.objects.all().count())
它目前输出意外的:
FIRST: 0
SECOND: 1
如果我注释掉游标代码,那么它会输出正确的结果:
FIRST: 0
SECOND: 0
这里有什么黑魔法?在Django的特殊单元测试事务中,connection.cursor
是否不支持?