Django - 如何在SqLite3后端启用外键

时间:2011-11-07 21:28:33

标签: django testing sqlite

当尝试使用SqlLite3作为Django的DB后端时,我希望能够使用SqLite的外键支持。 根据{{​​3}},您可以通过运行以下来启用外键支持:

PRAGMA foreign_keys = ON;

默认情况下禁用此支持,并且在运行大多数数据库相关测试时是理想的。 在使用Django测试框架时如何控制此功能?你能在setUp / tearDown方法中发送特定于后端的命令吗?您是否愿意在全局连接设置(' DATABASE =' 设置)中指定此选项?

2 个答案:

答案 0 :(得分:1)

这里部分回答:https://stackoverflow.com/a/6843142/552671

您只需在应用中激活它(通常在myapp/apps.py中)。

from django.db.backends.signals import connection_created

def activate_foreign_keys(sender, connection, **kwargs):
    """Enable integrity constraint with sqlite."""
    if connection.vendor == 'sqlite':
        cursor = connection.cursor()
        cursor.execute('PRAGMA foreign_keys = ON;')

class MyAppConfig(AppConfig):
    def ready(self):
        connection_created.connect(activate_foreign_keys)

您还必须配置MyAppConfig,将default_app_config = 'myapp.apps.PanelConfig'写入myapp/__init__.py

注意:这样不仅可以激活外键,还可以激活SQLite。我认为这就是你想要的。

答案 1 :(得分:0)

在当前的django中不再需要它。在https://code.djangoproject.com/ticket/14204

中关闭

但是在测试中未应用。这是因为检查被推迟到数据库提交,而在测试中从来没有发生。在测试中会回滚。