<dd id="t699n"></dd>

  • <em id="t699n"></em>

    1. <dd id="t699n"></dd>

      Django原生SQL語句查詢返回字典

      時間:2022-01-30 23:52:56 類型:python
      字號:    

        在django中執行自定義語句的時候,返回的結果是一個tuple ,并非我們期望的dict.

        如果想將查詢結果返回字典的形式,我們必須自己動手,豐衣足食

        1.根據cursor中的 description 得到各查詢的字段名

        2.根據得到的結果,把這兩個拼湊起來得到結果

        

      from django.db import connection
      def runquery(sql):    
          cursor = connection.cursor()
          cursor.execute(sql,None)
          col_names = [desc[0] for desc in cursor.description]
          print col_names
          row=cursor.fetchone()
          row = dict(zip(col_names, row))
          print row

        現在返回的結果就是 字典類型的了。

        總結成一個方法:

      def dict_fetch_all(cursor):
          "將游標返回的 多條 結果保存到一個字典對象中"
          desc = cursor.description
          result = cursor.fetchall()
          return [dict(zip([col[0] for col in desc], row))for row in result]
      
      
      def dict_fetch_one(cursor):
          "將游標返回的 單條 結果保存到一個字典對象中"
          desc = cursor.description
          result = cursor.fetchone()
          keys = [col[0] for col in desc]
          return {keys[index] : result[index] for index in range(len(keys))}
      #調用方法如下:
      
      #"多條查詢"
      sql = "select title,keyword from zz_news"
      cursor.execute(sql)
      result = dict_fetch_all(cursor)
      
      for row in result:
          print(row.get("title"))
      
      #單條查詢
      sql = "select * from zz_news where id = 5"
      cursor.execute(sql)
      result = dict_fetch_one(cursor)
      print(result.get("title"),result.get("createtime"))

        直接傳入結果的cursor ,就可以得到結果集為dict 的類型。

        總結:如果用 django  不是復雜的SQL 查詢,盡量用 orm 去完成。如果是比較復雜的SQL語句,涉及到很多表,而且并不完全滿足django 的foregion key ,甚至是多個 primary key 對應的話,就自己用 原生的SQL 去完成??赡軙?,但在生成字典的時候,數據量不要太大,沒測試過太大會有什么性能問題。但對于小數據量,肯定沒問題,基本不用考慮性能。


      黄网站免费 <