Django - 查看sql查询而不发布迁移

may*_*jan 28 django

当我对某些模型进行更改时,我想查看django将运行的SQL以在数据库上实现这些更改.

这样做的正常方法是"makemigrations appname".这将产生一个迁移,比如说,'0001_someName.py'.然后可以做'sqlmigrate 0001_someName.py'

但我想直接查看sql,而不必创建中间迁移.可以这样做吗?

Ami*_*rma 53

python manage.py sqlmigrate <appname> <migration no eg. 0001 or 0004>
Run Code Online (Sandbox Code Playgroud)

这将显示用于特定应用程序迁移的SQL语句.但是如果你想显示特定应用程序的所有sql,请使用:

python manage.py sqlmigrate <appname>
Run Code Online (Sandbox Code Playgroud)

  • 我发现排除迁移号码失败了"错误:Django 2.0上需要以下参数:migration_name",所以我认为只支持你的第一个例子.然而,这是我正在寻找的答案. (4认同)
  • 我有一个数据迁移想要分析,但“sqlmigrate”没有显示任何内容。事情应该是这样吗?这是否仅在执行架构更改迁移命令时显示? (2认同)

Gri*_*ave 9

这些现有的答案是不够的,因为我发现尝试遵循它们。首先检测并为您的应用程序制作迁移脚本:

manage.py makemigrations app
Run Code Online (Sandbox Code Playgroud)

记下文件名开头的四位数迁移编号。然后打印 SQL:

manage.py sqlmigrate app 0002  # <-- number here 
Run Code Online (Sandbox Code Playgroud)

完成后,在运行或提交之前删除该文件:

rm app/migrations/0002_auto_8675309.py
Run Code Online (Sandbox Code Playgroud)


knb*_*nbk 6

Django 不提供该选项。您始终可以创建迁移、运行sqlmigrate和删除迁移文件。只要不应用migrate,就不会发生任何事情。


moo*_*uck 5

python manage.py sql <appname>
Run Code Online (Sandbox Code Playgroud)

-打印给定应用程序名称的CREATE TABLE SQL语句。

python manage.py sqlall <appname>
Run Code Online (Sandbox Code Playgroud)

-打印给定应用程序名称的CREATE TABLE和初始数据SQL语句。

您可以在此处找到详细的文档。 https://docs.djangoproject.com/zh-CN/1.8/ref/django-admin/

  • 这些命令在 Django 1.9 中已弃用 https://docs.djangoproject.com/en/1.9/internals/deprecation/#deprecation-removed-in-1-9 @amit-sharma 的答案是下一个最佳选择 (6认同)
  • 这些不是 `manage.py` 命令,而是 `django-admin` 命令,因为您还链接到 (2认同)