在syncdb之后指示Django运行自定义SQL的最佳方法是什么?

时间:2016-05-05 17:26:11

标签: django

有很多次我想应用一些自定义模式定义(函数,视图,类型,触发器......) 初始化新数据库时或运行测试之前。我想到了settings.py的以下添加内容,它可以正常工作

from django.db.models.signals import post_syncdb
from django.db import connection

# Apply schema changes not defined by Django. Set a module-level
# flag to guard against multiple invocations of syncdb_handler()

def syncdb_handler(**kwargs):
    if getattr(connection, 'syncdb_called', None):
        return
    connection.syncdb_called = True
    cursor = connection.cursor()
    cursor.execute(open('/path/to/schema.sql')).read())

post_syncdb.connect(syncdb_handler)

文档似乎没有提出这样的解决方案。是否存在将自定义SQL应用于数据库创建的一部分的约定?

在这个例子中,连接处理程序被多次调用,保持全局变量似乎不是一个好的设计模式。

1 个答案:

答案 0 :(得分:1)

使用post_syncdb信号是他过去喜欢做事的方式(尽管将此代码放在settings.py中是最不寻常的。)

但是不再使用syncdb。现在,使用migrations创建和修改数据库。这样做的做法是使用migrations.RunSQLmigrations.RunPython根据需要对数据库进行自定义更改。

相关问题