尝试查看syncdb将在当前时刻生成的SQL。
经过多次搜索,答案并不明显 - 我知道你可以使用:
python manage.py syncdb --sqlall
返回:
Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created.
如果代码发生了任何变化,如何输出整个数据库发生的变化?
有没有办法为所有需要syncdb'ing的应用生成所有SQL?或者我需要明确说明每个应用程序?我不是在寻找整个站点的所有SQL,只是针对syncdb实现的更改。
我有几个需要sql生成的应用来描述这些变化。我可以明确地列出它们,但syncdb有没有办法为我解决这个问题?
答案 0 :(得分:6)
你可以做到
./manage.py sqlall <app_name>
获取sql statements and initial data for the app.
如果您只想要sql statements,
./manage.py sql <app_name>
这是一个mangement command,可以为所有已安装的应用打印sqlall。 或者,您可以编写自己的管理命令来获取所有已安装的应用程序,并为每个应用程序调用{{1}}。
答案 1 :(得分:1)
Django Extensions包有许多django的自定义管理命令,其中一个命令是sqldiff:
https://github.com/django-extensions/django-extensions/blob/master/docs/sqldiff.rst
首先,
sudo pip install django-extensions
接下来,将django-extensions添加到已安装的应用
INSTALLED_APPS = (
...
'django_extensions',
...
)
然后,你可以
python manage.py sqldiff -a
您将看到完整的差异列表,以及一长串ALTER TABLE语句,这些语句将确保正确设置所有字段(长度,空值,无符号等)
将列出任何未创建的表,然后您可以转储SQL以使用
创建它们python manage.py sqlall {app_label}
值得注意的是,对于列名更改,sqldiff将尝试简单地删除重命名的列并在其位置创建新列 - 所以不要只复制整个sqldiff并且在没有检查的情况下运行它。