一个简单的问题,有没有一种方法Django可以为模型安装自定义sql,标记为非托管?
我已经定义了自定义sql文件并将其放在django文档中所需的目录中:
Django提供了一个钩子,用于在运行迁移时传递数据库任意SQL,该SQL在CREATE TABLE语句之后执行。您可以使用此挂钩填充默认记录,也可以创建SQL函数,视图,触发器等。
钩子很简单:Django只在你的app目录中查找名为sql /“modelname”.sql的文件,其中“modelname”是小写的模型名称。
src:https://docs.djangoproject.com/en/1.8/howto/initial-data/#providing-initial-sql-data
问题是当模型标记为“managed = False”时它不起作用。
就我而言,django只是使用自定义sql文件中的内容附加CREATE TABLE语句。这解释了CREATE语句不存在时的行为。
但Django有没有办法执行我的自定义SQL?
我的非托管模型是数据库视图的模型,我尝试使用此自定义sql创建。我希望Django在运行“manage.py migrate”时自动运行这个sql。
我对将sql代码放在迁移文件中并不感兴趣,因为它很长,而且我想保留在sql文件中。
我正在使用Django 1.8。
答案 0 :(得分:0)
如果您正确命名文件,则每次运行manage.py syncdb
时都会执行该文件。
然而,文件的命名有点棘手,并且从文档中不清楚。例如,如果在MySQL上运行的名为MyApp的应用程序中有一个名为MyModel的非托管模型,那么您应该在myapp/sql/mymodel.mysql.sql
中找到一个文件。
此外,如果该文件包含SQL视图,则必须使用myapp_mymodel
等格式命名视图。