Bri*_*unt 5 sql django django-models
你怎么能得到Django模型的.save()的SQL,即
from django.db import models
class MyM(models.Model):
text = models.TextField()
Run Code Online (Sandbox Code Playgroud)
如何获取将在以下场景中创建/使用的SQL:
>>> m = MyM(text="123")
>>> m.save()
# What SQL Django just run?
Run Code Online (Sandbox Code Playgroud)
谢谢!
小智 6
如果你想在保存之前获取模型的insert语句 - 你可以使用以下代码(在django 1.4上查看)
from django.db import connection
from django.db.models import sql
def object_to_query(objects):
if isinstance(objects, (list, tuple)
values = obj._meta.local_fields
q = sql.InsertQuery(obj)
q.insert_values(values, [obj])
compiler = q.get_compiler('default')
# Normally, execute sets this, but we don't want to call execute
setattr(compiler, 'return_id', False)
stmts = compiler.as_sql()
stmt = [stmt % params for stmt, params in stmts]
return stmt[0]
Run Code Online (Sandbox Code Playgroud)
来自 Django 常见问题解答:
如何查看 Django 正在运行的原始 SQL 查询?确保您的 Django DEBUG 设置设置为 True。然后,只需这样做:
>>> from django.core.db import db
>>> db.queries
[{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_polls.pub_date FROM polls_polls',
'time': '0.002'}]
Run Code Online (Sandbox Code Playgroud)
db.queries 仅在 DEBUG 为 True 时可用。它是按查询执行顺序排列的字典列表。每个字典都有以下内容:
sql--原始 SQL 语句
time-- 语句执行所需的时间(以秒为单位)。
db.queries 包含所有 SQL 语句——INSERT、UPDATES、SELECT 等。