python - 在内存中运行 Django MySQL 测试

标签 python mysql django

我有一个使用 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/

相关文章:

django - django 怎么可能通过DoesNotExist 然后引发 "Duplicate entry"?

python - 如何仅运行 Celery 调度多次,直到再次调用任务?

python - 为什么我的函数无法访问封闭函数中的变量?

python - tkinter Canvas 文本输出

python - 在具有 Tensorflow 后端的 Keras 上,在不同的输入部分上并行拟合 LSTM 和一些密集层

php - 使用MySQL+PHP+Morris.js生成折线图

java - 如何配置Tomcat连接MySQL

Django Select2Widget 无法使用脆皮形式正确设置样式

mysql - 当列确实存在时没有这样的列错误

Heroku 中的 Django 调试工具栏