要在 Django 中打印出在数据库中执行的语句,你可以通过以下步骤进行设置:
- 在你的 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,
},
}
}
- 为了方便设置,你可以通过在 shell 中设置环境变量的方式来开启调试模式,输入以下命令:
export DEBUG_SQL=1
如果你使用的是 Windows 操作系统,则需要使用 set 命令:
set DEBUG_SQL=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')]
- 通过 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 语句可能会暴露你的数据库信息,所以仅限用于本地开发环境,切勿在生产环境中使用。