最新亚洲精品福利在线,欧美一区二区三区大片,久久91无码一区二区三区,色哟哟免费观看视频入口,美女裸露双奶头屁股无裸体

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

時(shí)間:2022-01-30 23:52:56 類型:python
字號(hào):    

  在django中執(zhí)行自定義語句的時(shí)候,返回的結(jié)果是一個(gè)tuple ,并非我們期望的dict.

  如果想將查詢結(jié)果返回字典的形式,我們必須自己動(dòng)手,豐衣足食

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

  2.根據(jù)得到的結(jié)果,把這兩個(gè)拼湊起來得到結(jié)果

  

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

  現(xiàn)在返回的結(jié)果就是 字典類型的了。

  總結(jié)成一個(gè)方法:

def dict_fetch_all(cursor):
    "將游標(biāo)返回的 多條 結(jié)果保存到一個(gè)字典對(duì)象中"
    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):
    "將游標(biāo)返回的 單條 結(jié)果保存到一個(gè)字典對(duì)象中"
    desc = cursor.description
    result = cursor.fetchone()
    keys = [col[0] for col in desc]
    return {keys[index] : result[index] for index in range(len(keys))}
#調(diào)用方法如下:

#"多條查詢"
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"))

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

  總結(jié):如果用 django  不是復(fù)雜的SQL 查詢,盡量用 orm 去完成。如果是比較復(fù)雜的SQL語句,涉及到很多表,而且并不完全滿足django 的foregion key ,甚至是多個(gè) primary key 對(duì)應(yīng)的話,就自己用 原生的SQL 去完成??赡軙?huì)更好,但在生成字典的時(shí)候,數(shù)據(jù)量不要太大,沒測(cè)試過太大會(huì)有什么性能問題。但對(duì)于小數(shù)據(jù)量,肯定沒問題,基本不用考慮性能。


<