如何在Django中为非托管模型安装自定义SQL



一个简单的问题,Django有没有办法为标记为非托管的模型安装自定义sql?

我已经定义了自定义sql文件,并将其放在django文档所需的目录中:

Django提供了一个钩子,用于在运行migrate时传递在CREATE TABLE语句之后执行的数据库任意SQL。您可以使用这个钩子来填充默认记录,也可以创建SQL函数、视图、触发器等。

钩子很简单:Django只需查找一个名为sql/"的文件;型号名称";。sql,在您的应用程序目录中,其中"型号名称";是模型的小写名称。

src:https://docs.djangoproject.com/en/1.8/howto/initial-data/#providing-初始sql数据

问题是,当模型被标记为"0"时;managed=False";。

就我而言,django只是将自定义sql文件中的内容附加到CREATETABLE语句中。将行为解释为CREATE语句不存在。

但是Django有什么方法可以执行我的自定义sql吗?

我的非托管模型是数据库视图的模型,我试图用这个自定义sql创建它。我希望Django在运行";manage.py migrate";。

我不想把sql代码放在迁移文件中,因为它很长,我想保留在sql文件中。

我使用的是Django 1.8。

如果正确命名文件,则每次运行manage.py syncdb时都会执行该文件。

然而,文件的命名有点棘手,并且从文档中看不清楚。例如,如果在MySQL上运行的名为MyApp的应用程序中有一个名为MyModel的非托管模型,那么应该有一个位于myapp/sql/mymodel.mysql.sql中的文件。

此外,如果该文件包含SQL视图,则必须使用类似myapp_mymodel的格式命名该视图。

最新更新