亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

獲取django框架orm query執(zhí)行的sql語(yǔ)句實(shí)現(xiàn)方法分析

 更新時(shí)間:2019年06月20日 11:44:35   作者:輕舞肥羊  
這篇文章主要介紹了獲取django框架orm query執(zhí)行的sql語(yǔ)句實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Django框架中orm query執(zhí)行的sql語(yǔ)句獲取方法相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了獲取django框架orm query執(zhí)行的sql語(yǔ)句實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

利用Django orM 可以很方便的寫出很多查詢,但有時(shí)候,我們需要檢查這些利用 orM 生成的 SQL 語(yǔ)句是否正確,就需要檢查這些ORM 生成的 原生的SQL 語(yǔ)句是否正確。經(jīng)過測(cè)試有如下幾種方法:

1. 通過數(shù)據(jù)庫(kù)的跟蹤日志,可以看到查詢的語(yǔ)句,比如mysql 就可以配置把所有的 SQL 語(yǔ)句打印到日志中,但這種方式并不推薦,只是沒有辦法的時(shí)候才這么做。

2. 利用django Query 提供的方法. 比如:

 queryset = MyModel.objects.all()
 print 'query sql: ' + str(queryset .query)
 #result:

我采用pydev 對(duì) django 進(jìn)行debug, 如下是截圖,可以清楚的看到結(jié)果:

3. 設(shè)置settings 里的 debug=True, 這個(gè)時(shí)候可以用這種方式來獲取

from django.db import connections
connections['default'].queries

結(jié)果類似如下:

[{u'time': u'0.000', u'sql': u'Select COUNT(*) FROM `my_article` Where `my_article`.`category` = 68 '}]

4. 利用三方提供的middleware 來實(shí)現(xiàn),參考這里: https://djangosnippets.org/snippets/290/

from django.db import connection
from django.conf import settings
import os
def terminal_width():
  """
  Function to compute the terminal width.
  WARNING: This is not my code, but I've been using it forever and
  I don't remember where it came from.
  """
  width = 0
  try:
    import struct, fcntl, termios
    s = struct.pack('HHHH', 0, 0, 0, 0)
    x = fcntl.ioctl(1, termios.TIOCGWINSZ, s)
    width = struct.unpack('HHHH', x)[1]
  except:
    pass
  if width <= 0:
    try:
      width = int(os.environ['COLUMNS'])
    except:
      pass
  if width <= 0:
    width = 80
  return width
class SqlPrintingMiddleware(object):
  """
  Middleware which prints out a list of all SQL queries done
  for each view that is processed. This is only useful for debugging.
  """
  def process_response(self, request, response):
    indentation = 2
    if len(connection.queries) > 0 and settings.DEBUG:
      width = terminal_width()
      total_time = 0.0
      for query in connection.queries:
        nice_sql = query['sql'].replace('"', '').replace(',',', ')
        sql = "\033[1;31m[%s]\033[0m %s" % (query['time'], nice_sql)
        total_time = total_time + float(query['time'])
        while len(sql) > width-indentation:
          print "%s%s" % (" "*indentation, sql[:width-indentation])
          sql = sql[width-indentation:]
        print "%s%s\n" % (" "*indentation, sql)
      replace_tuple = (" "*indentation, str(total_time))
      print "%s\033[1;32m[TOTAL TIME: %s seconds]\033[0m" % replace_tuple
    return response

當(dāng)然,定義了這個(gè)middleware之后,需要修改setting 里的配置

MIDDLEWARE_CLASSES = (
  'django.middleware.common.CommonMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'yihaomen.common.mymiddleware.SqlPrintingMiddleware', # 這是增加的顯示sql語(yǔ)句的middleware
  # Uncomment the next line for simple clickjacking protection:
  # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

結(jié)果會(huì)打印所有執(zhí)行的sql 語(yǔ)句, 推薦采用這種方式打印 sql 語(yǔ)句,因?yàn)楸容^方便,而且是插拔式的,不需要的時(shí)候去掉這個(gè)middleware就可以了,不過這只能在debug 模式下使用,對(duì)開發(fā)者來說足夠了,生產(chǎn)環(huán)境不需要debug模式。

希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python中的枚舉函數(shù)enumerate()的具體用法

    Python中的枚舉函數(shù)enumerate()的具體用法

    本文主要介紹了Python中的枚舉函數(shù)enumerate()的具體用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • python爬蟲 requests-html的使用

    python爬蟲 requests-html的使用

    這篇文章主要介紹了python爬蟲 requests-html的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python中的編碼和解碼及\x和\u問題

    python中的編碼和解碼及\x和\u問題

    這篇文章主要介紹了python中的編碼和解碼及\x和\u問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • numpy自動(dòng)生成數(shù)組詳解

    numpy自動(dòng)生成數(shù)組詳解

    這篇文章主要介紹了numpy自動(dòng)生成數(shù)組詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換

    經(jīng)常會(huì)遇到圖片格式需要轉(zhuǎn)換的情況,這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì)、實(shí)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python Pytorch深度學(xué)習(xí)之?dāng)?shù)據(jù)加載和處理

    Python Pytorch深度學(xué)習(xí)之?dāng)?shù)據(jù)加載和處理

    今天小編就為大家分享一篇Pytorch 數(shù)據(jù)加載與數(shù)據(jù)預(yù)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-10-10
  • Python?文本文件與csv文件的讀取與寫入

    Python?文本文件與csv文件的讀取與寫入

    這篇文章主要介紹了Python文本文件與csv文件的讀取與寫入,有讀取文件的?read()方法、讀取文件的readline()?方法、讀取文件的?readlines()方法等相關(guān)讀寫內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • python字符串的拼接方法總結(jié)

    python字符串的拼接方法總結(jié)

    這篇文章主要介紹了python字符串的拼接方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 通過Python讀取照片的Exif信息解鎖圖片背后的故事

    通過Python讀取照片的Exif信息解鎖圖片背后的故事

    這篇文章主要為大家介紹了通過Python讀取照片的Exif信息解鎖圖片背后的故事探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Pickle模塊中的dump()和load()方法簡(jiǎn)介

    Pickle模塊中的dump()和load()方法簡(jiǎn)介

    Pickle模塊實(shí)現(xiàn)了基本的數(shù)據(jù)序列化與反序列化操作,通過序列化操作,我們可以將程序中運(yùn)行的對(duì)象信息轉(zhuǎn)化為字節(jié)流保存到文件中去,永久存儲(chǔ)在磁盤上,這篇文章主要介紹了Pickle模塊中的dump()和load()方法介紹,需要的朋友可以參考下
    2023-03-03

最新評(píng)論