【问题标题】:Django sqlmigrate not showing raw sqlDjango sqlmigrate 不显示原始 sql
【发布时间】:2020-06-28 02:06:45
【问题描述】:

我试图从 Django 迁移文件中获取原始 sql。

我采取了以下步骤:

$ python manage.py makemigrations

$ python manage.py sqlmigrate app_name 0001

应该显示原始 sql 命令,但结果只包含:

BEGIN;
--
-- Create model User
--
--
-- Create model Config
--
COMMIT;

如何从 sqlmigrate 获取原始 sql?

【问题讨论】:

    标签: python django


    【解决方案1】:

    我今天遇到了类似的问题(或者我是这么认为的)。就我而言,事实证明我在迁移中进行了许多 AlterField 更改,这些更改不需要对数据库进行任何基础更改。我最初认为 sqlmigrate 没有向我显示原始 SQL,但在阅读 For some migrations, why `sqlmigrate` shows empty, or the same SQL both directions? 之后,我意识到在我的情况下,没有任何原始 SQL 可以显示。

    【讨论】:

      【解决方案2】:

      多个数据库和路由器有同样的问题,我的问题是一样的 - sqlmigrate 只打印'创建模型 XXX' 而不是 SQL - 添加 --database="db_name_from_settings_file" 使它工作(django 3.1.6)

      【讨论】:

        【解决方案3】:

        我看了sqlmigrate的源码,发现添加db name for migrate可能会起作用。

        所以工作版本是:

        $ python manage.py sqlmigrate app_name 0001 --database=db_name

        源代码在这里: https://github.com/django/django/blob/master/django/core/management/commands/migrate.py

        【讨论】:

          【解决方案4】:

          根据文档sqlmigrate,它只会以非原始 SQL 格式打印;它不会像您期望的那样以原始形式打印它。您可以使用以下方法获取 Django 已执行的所有原始 SQL。

          Django-extensions 有一个带有参数print-sql 的命令shell_plus

          ./manage.py shell_plus --print-sql
          

          在 django-shell 中所有执行的查询都会被打印出来

          例如:

          User.objects.get(pk=1)
          SELECT "auth_user"."id",
                 "auth_user"."password",
                 "auth_user"."last_login",
          FROM "auth_user"
          WHERE "auth_user"."id" = 1
          
          Execution time: 0.002466s [Database: default]
          
          <User: username>
          

          【讨论】:

          • sqlmigrate 有时有效,但并非总是如此。我想知道它什么时候会显示原始 sql。它与Django版本有关吗?我想要迁移的 sql,而不是运行我的应用程序。我猜你的解决方案只能在运行应用程序时显示sql,对吧?
          • 我明白了。如果您可以尝试使用我提供的扩展程序,它将准确地完成相同的工作。如果您确实想知道为什么 sqlmigrate 不起作用,那么用它提供 rawsql 和非 rawsql 的情况更新您的问题。我只是建议使用扩展程序。
          猜你喜欢
          • 1970-01-01
          • 2013-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-21
          • 2012-03-16
          • 2012-06-03
          • 1970-01-01
          相关资源
          最近更新 更多