2010-03-04 8 views
5

आप कैसे एक Django मॉडल .save() के लिए एसक्यूएल, यानी प्राप्त कर सकते हैंजाओ एसक्यूएल एक Django मॉडल है (या कहेंगे) .save पर()

from django.db import models 

class MyM(models.Model): 
    text = models.TextField() 

कैसे आप एसक्यूएल कि होगा प्राप्त कर सकते हैं निम्नलिखित परिदृश्य में बनाया/प्रयोग किया जाना चाहिए:

>>> m = MyM(text="123") 
>>> m.save() 
# What SQL Django just run? 

धन्यवाद!

उत्तर

4

Django पूछे जाने वाले प्रश्न से:

मैं कैसे देख सकते हैं कच्चे SQL क्वेरी Django चल रहा है? सुनिश्चित करें कि आपका Django DEBUG सेटिंग सही पर सेट है। फिर, बस यह करें:

>>> 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'}] 

db.queries केवल तभी उपलब्ध है जब DEBUG सही है। क्वेरी निष्पादन के क्रम में यह शब्दकोशों की एक सूची है। प्रत्येक शब्दकोश में निम्न है:
sql - कच्चे एसक्यूएल स्टेटमेंट
time - सेकंड में निष्पादित करने में कितना समय लगेगा। आवेषण, अपडेट, का चयन करता है, आदि

+0

धन्यवाद, DrDee उपयोग कर सकते हैं। क्या सबसे हालिया क्वेरी db.queries [-1] होगी? (या, यदि यह एक पुनरावर्तक है, सूची (db.queries) [- 1])? - टिप्पणी http://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running: –

+2

यहाँ प्रश्न में पूछे जाने वाले प्रश्न है यह django.db आयात connection' से 'है और' connection.queries' –

+0

मुझे लगता है db.queries [-1], लेकिन सिर्फ यह एक शॉट देने के लिए और देखो क्या होता है। – DrDee

2

बस python manage.py sqlall APP_NAME चलाने -
db.queries सभी SQL कथन भी शामिल है।

4

यदि आप चाहते हैं सहेजने से पहले मॉडल के लिए डालने बयान मिलता है - आप निम्नलिखित कोड (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] 
+0

यह सही जवाब होना चाहिए। बचत कथन को पहले से चलाने के बाद बहुत कुछ नहीं है, जब कोई इस बात से चिंतित है कि यह डेटा कैसे बदलता है और हम यह सुनिश्चित करना चाहते हैं कि यह अजीब कुछ भी नहीं कर रहा है। – cerd

संबंधित मुद्दे