我正在尝试让我的应用程序在syncdb上运行一些自定义SQL,并使用将一些INSERT语句放入/sql/.sql的官方方法
现在,当我运行“manage.py sqlall”时,我想运行的所有SQL都在那里。
然而,在运行syncdb之后,我想要的数据在数据库中找不到!我错过了什么吗?
编辑:我想要插入的应用程序是使用南迁移,这可能是为什么跳过初始SQL。有没有人知道如何在迁移后强制它运行SQL?
答案 0 :(得分:3)
Initial data sql并未针对南方管理的应用程序运行。根据我的理解,这是设计的,虽然我无法找到任何形式的证明,除了mailing list post。
要实现相同的行为,您可以创建迁移并将转换 SQL转换为Python。这就是我安装视图的方法:
创建和编辑迁移:
$ python manage.py schemamigration app1 install_foo_view --empty
$ vim app1/migrations/*_install_foo_view.py
这是迁移本身:
from south.db import db
from south.v2 import SchemaMigration
class Migration(SchemaMigration):
def forwards(self, orm):
db.execute("CREATE VIEW app1_foo AS SELECT col1, col2 FROM app1_bar")
def backwards(self, orm):
db.execute("DROP VIEW app1_foo")
# autogenerated models attibute goes here
complete_apps = ['app1']
对于数据迁移,流程类似:
$ python manage.py datamigration app1 install_bars
$ vim app1/migrations/*_install_bars.py
这是迁移本身:
from south.db import db
from south.v2 import DataMigration
class Migration(DataMigration):
def forwards(self, orm):
orm.Bar.objects.create(col1='val1', col2='val2')
def backwards(self, orm):
orm.Bar.objects.filter(col1='val1', col2='val2').delete()
# autogenerated models attibute goes here
complete_apps = ['app1']
数据固定装置的official South doc已损坏:
对于架构更改,它不能很好地扩展。
每次更改Bar
模型字段时,都应复制并调整夹具文件。所以你最终会得到" my_fixture_v1.json"," my_fixture_v2.json"等等。
否则,如果您不对其进行版本控制并保留最新版本,则之前版本的模型与灯具之间会出现不匹配,您无法来回导航。
建议的方法解决了这两个问题:
orm.Bar
,因此您可以在历史记录中拥有适用于Bar
的字段集。你不会得到任何遗漏或额外的字段。Bar
更改来复制任何内容。可以向后迁移。
请注意,filter().delete()
组合用于代替get().delete()
。这样您就不会删除用户已更改的Bar
,也不会在找不到Bar.DoesNotExist
时失败。
答案 1 :(得分:-1)
我不确定你在做什么,但如果你想要预先填充数据库,你需要使用灯具。