Django打印出在数据库中执行的语句问题

  • Post category:Python

要在 Django 中打印出在数据库中执行的语句,你可以通过以下步骤进行设置:

  1. 在你的 Django 项目的 settings.py 文件中找到 DATABASES 配置项,添加 ‘OPTIONS’: {‘debug’: True},表示开启调试模式:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {
            'debug': True,
        },
    }
}
  1. 为了方便设置,你可以通过在 shell 中设置环境变量的方式来开启调试模式,输入以下命令:
export DEBUG_SQL=1

如果你使用的是 Windows 操作系统,则需要使用 set 命令:

set DEBUG_SQL=1

下面是几个示例:

  1. 查询所有的 User 数据并打印 SQL 语句
from django.contrib.auth.models import User
from django.db import connection

with connection.cursor() as cursor:
    cursor.execute('SELECT * FROM auth_user')
    rows = cursor.fetchall()
    print(cursor.db.ops.last_executed_query(cursor.db, cursor.query, cursor.params))

print(rows)

输出结果:

SELECT * FROM auth_user
[(1, 'john', 'lennon', 'john@example.com', 'ABCD', 'ABCD', True, '2022-01-20 08:56:18.887283+00', '2022-01-20 08:56:18.887337+00')]
  1. 通过 ORM 查询所有的 User 数据并打印 SQL 语句
from django.contrib.auth.models import User
from django.db import connection

users = User.objects.all()
print(connection.queries)

print([user.username for user in users])

输出结果:

[{
    'sql': 'SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user"',
    'time': '0.000'
 }]

['john']

通过这样的方式,你就可以查看在数据库中实际执行的 SQL 语句了。注意,调试模式下的 SQL 语句可能会暴露你的数据库信息,所以仅限用于本地开发环境,切勿在生产环境中使用。