我有一个使用 mysql 作为后端的 django 1.4 项目。我有在内存中运行的测试设置
if 'test' in sys.argv:
DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}
问题是我需要使用 mysql 功能(全文索引)。
有没有办法让django在内存中运行MySQL进行测试?
我的项目依赖全文索引。当在 I syncdb 上开发项目时,然后使用 sql 执行 .sql
文件以创建全文索引。
我想在我测试的功能中使用 django orm 全文搜索。我正在尝试在每个测试的初始化中手动添加全文索引,例如:
cursor.execute('alter table mytable add fulltext(one, two)')
这在使用 sqlite 时不起作用(我相信是因为 sqlite 不支持全文索引)
当我删除内存测试时,上面的 sql 确实有效。我喜欢内存测试的速度。 有什么方法可以在内存中运行 mysql 吗?
人们如何测试依赖于数据库特定功能的应用程序?例如全文索引或 gis 等...他们必须在文件系统上正常运行测试吗?
谢谢
最佳答案
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'
}
}
}
但是 根据documentation :
MEMORY tables cannot contain BLOB or TEXT columns.
因此我认为它对您的(以及许多其他)用例毫无用处。
我在 this thread 中找到了一些其他加速 MySQL 测试的技巧。 .请务必阅读 Daniel Roseman 关于使用 INNODB
引擎的回答。
关于python - 在内存中运行 Django MySQL 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234679/