在 [myapp]/sql/[model-name].sql 中,我有一些现有的 SQL 语句,我想在 CREATE TABLE 命令之后用作自定义挂钩。
我的应用程序位于 INSTALLED_APPS 中。如果我运行,我会看到列出的./manage.py sql
。
找到了我的自定义钩子;如果我运行以下任何命令,我会看到 SQL 语句输出:
./manage.py sqlall <myapp>
./manage.py sqlcustom <myapp>
./manage.py sql <myapp>
我在我的 Mac 上使用 postgres 9.x。
如果我psql
到同一个数据库(没有用户)并将它们从 .sql 文件复制并将它们粘贴到 psql 命令输入中,它们都可以工作......所以我相信它们是 postgres 理解的有效 SQL。这些都是非常简单的 INSERT 语句(下面提到的夹具)。
但是,如果我运行./manage.py syncdb
这些语句要么不运行,要么它们被忽略或发生静默错误;我所知道的是新行不会出现在数据库中。我正在跟踪 postgres 日志文件,并且在运行 syncdb 时没有记录任何内容,所以我不知道它是否没有找到我的 .sql 文件,或者在它到达数据库之前解析它并发现一些错误。
我已经创建了一个 .json 文件,用于固定装置,与这些语句等效,并且./manage.py loaddata <path-to-json-file>
工作正常:我的站点现在在数据库中显示这些值。这让我相信我的设置文件是正确的,并且我在 postgres 中写入的数据库设置正确,并且我在运行./manage.py
.
我在其他帖子中看到 django 文档是错误的,我应该将自定义钩子放在“模型”目录中,但我不知道这是否正确;如果sqlall
并sqlcustom
找到我的钩子,不应该syncdb
找到它吗?此外,我(还)没有模型目录,可能不需要它。
出于各种原因,我宁愿不使用 JSON 格式,但如果必须的话,我会......但是我在 .sql 格式上投入了很多时间,我真的很想知道发生了什么(而且我已经看够了)现有的相关问题,这可能对其他人有帮助)。