【问题标题】:Place to set Sqlite PRAGMA option in Django project在 Django 项目中设置 Sqlite PRAGMA 选项的地方
【发布时间】:2011-05-30 22:01:07
【问题描述】:

根据this test,设置PRAGMA synchronous=OFF Sqlite可以显着提升Sqlite写入性能。

我很清楚这些缺点,但仍想尝试一下。

在 Django 项目中设置此 PRAGMA 选项的最佳位置是什么?

我无法从 settings.py 中执行此操作 - 至少不是文章建议的方式 - 因为 from django.db import connection 会导致递归导入错误。

【问题讨论】:

    标签: django sqlite


    【解决方案1】:

    将此代码添加到您已安装应用之一的__init__.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;')
    
    connection_created.connect(activate_foreign_keys)
    

    【讨论】:

    • 不错且干净的解决方案,将尝试。谢谢!
    • 虽然我删除了我的数据库文件,删除了所有以前的迁移,并创建了新的迁移,但这对我没有任何影响。未按预期使用“删除级联”创建表。我想知道为什么没有发生这种情况。
    【解决方案2】:

    文章建议您将其添加为中间件(在最后)。然后将该中间件配置为 settings.py 中的字符串,因此您不应该遇到任何导入冲突。

    【讨论】:

    • 这是一个相当老的线程,但我仍然可以指出,在每个请求时都会调用中间件,因此可能不是像设置 synchronous 这样的 sqlite pragma 的理想位置,因为它感觉更多就像一个一次性的决定。
    猜你喜欢
    • 2011-12-28
    • 2012-04-15
    • 2013-06-02
    • 1970-01-01
    • 2011-05-25
    • 2017-05-06
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多