在内存中运行Django MySQL测试

dm0*_*514 4 python mysql django

我有一个使用mysql作为后端的django 1.4项目.我有测试设置在内存中运行

if 'test' in sys.argv:
  DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}
Run Code Online (Sandbox Code Playgroud)

问题是我需要使用mysql功能(全文索引).

有没有办法让django在内存中运行MySQL进行测试?

我的项目依赖于全文索引.在i syncdb上开发项目时,然后.sql使用sql 执行文件以创建全文索引.

我想在我测试的函数中使用django orm全文搜索.我试图在每个测试的初始化上手动添加全文索引,如:

cursor.execute('alter table mytable add fulltext(one, two)')

使用sqlite时这不起作用(我相信因为sqlite不支持全文索引)

当我删除内存测试时,上面的sql DOES工作.我喜欢内存测试的速度. 有没有办法在内存中运行mysql?

人们如何测试依赖于数据库特定功能的应用程序?像全文索引或gis等...他们是否必须在文件系统上正常运行测试?

谢谢

Dir*_*ler 14

MySQL有一个MEMORY存储引擎.您可以使用OPTIONS密钥激活它:

if 'test' in sys.argv:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': 'localhost',
            'NAME': 'foo',
            'USER': 'bar',
            'PASSWORD': 'baz',
            'OPTIONS': {
                'init_command': 'SET storage_engine=MEMORY'
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

根据文件:

MEMORY tables cannot contain BLOB or TEXT columns.
Run Code Online (Sandbox Code Playgroud)

因此,我认为它对你的(和许多其他)用例来说是无用的.

我在这个帖子中找到了一些加速MySQL测试的其他技巧.请务必阅读Daniel Roseman关于使用INNODB引擎的答案.