在Django中,如何在运行syncdb时从SQL文件创建表

Zac*_*eed 5 python mysql django views django-models

如何使syncdb执行由我定义的SQL查询(用于表创建),而不是自动生成表.

我正在寻找这个解决方案,因为我的应用程序中的一些特定模型代表遗留数据库表的SQL表视图.所以,我在我的django-DB中创建了他们的SQL视图,如下所示:

CREATE VIEW legacy_series AS SELECT*FROM legacy.series;

我有一个反向工程模型,代表上面的视图/传统.但每当我运行syncdb时,我必须首先通过运行sql脚本来创建所有视图,否则syncdb只是为它们创建表(如果找不到视图).

如何让syncdb运行上面提到的SQL?

Kil*_*nDS 5

我知道有两种可能的方法可以使您的模型适应遗留数据库表(不使用视图):

1)在项目中运行python manage.py inspectdb.这将为现有数据库表生成模型,然后您可以继续使用这些模型表.

2)使用某些特定设置修改表格.首先,通过在元选项中设置db_table选项,在模型中定义表名.其次,通过设置db_column选项,为每个字段定义列名以匹配旧数据库.请注意,列出的其他db_选项可能用于匹配旧数据库.

如果您真的希望视图方法可以实现(丑陋)解决方法,则可以为每个应用程序模型定义自定义sql命令.该文件位于"application"/ sql /"model".sql中.Django会在创建所有表后调用这个sql.您可以尝试为生成的表指定DROP语句,然后在此文件中为view create语句指定.请注意,对于具有外键的表,这将有点棘手,因为django保证没有执行这些文件的顺序(所以在一个.sql中填充所有语句将是我认为最简单的方法,我以前从未尝试过这个).