如何在Django unittest中运行原始SQL

时间:2016-12-22 05:08:41

标签: python django sqlite django-unittest

如何在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是否不支持?

0 个答案:

没有答案