Django執行原生SQL語句

2021-10-10 07:02:00 字數 2342 閱讀 8003

}]

,"msg": "show successfully"

,"error_tag": 0

}

connection庫 和原生的sql語句資料庫,如下:

from django.db import connection # 匯入connection

sql_str =

"select * from book"

# str型別的原生sql語句

cursor = connection.cursor(

)# 用建立好的connection物件建立cursor游標物件

cursor.execute(sql_str)

# 執行自定義sql語句

datainfo = cursor.fetchall(

)# 取出執行返回的記錄,返回的tuple型別資料

cursor.close()# 執行完,關閉

connection.close(

)

上述操作可寫成:

from django.db import connection

sql_str =

"select * from book"

with connection.cursor(

)as cursor # with語句用於資料庫操作

cursor.execute(sql_str)

datainfo = cursor.fetchall(

)

connection庫 和原生的sql語句資料庫時,要注意:

1、connection.commit(

)# 增刪改操作要提交事務給connection物件,它改變了資料庫值。

2、pymysql中可以設定游標為字典型別,django中不行,需要自行封裝

游標(cursor)是系統為使用者開設的乙個資料緩衝區,存放sql語句的執行結果,主要用於處理和接收資料,可方便的對資料庫進行增、刪、改、查等各種操作。

django中model.objects.filter()返回的是list,而sql執行後返回的是tuple,且django中不像pymsql可以直接指定cursor的型別,因此,我們自行要封裝,使返回的型別保持一致,具體如下:

def

dict_fetchall

(cursor)

:# cursor是執行sql_str後的記錄,作入參

columns =

[col[0]

for col in cursor.description]

# 得到域的名字col[0],組成list

return

[dict

(zip

(columns, row)

)for row in cursor.fetchall()#

]

zip(columns,row) # 把列表columns和元組row兩兩對應組合,返回的是tuple資料

dict(zip(columns,row)) # 把tuple轉成dict鍵值對,返回的generator物件

[dict(zip(columns, row)) for row in cursor.fetchall()] # 轉成list

>> dict(zip(元組1,元組2,元組3)) # 三個引數會報錯如下

>> valueerror: dictionary update sequence element 0 has length 3; 2 is required

with connection.cursor(

)as cursor:

cursor.execute(sql)

datainfo = dict_fetchall(cursor)

# 呼叫上面的dict_fetchall()方法

return datainfo

最後datainfo返回的資料形式如data:

,,

]"msg": "show successfully"

,"error_tag": 0

}

django中使用原生sql操作

第三方庫之django.db的connection庫

pymsql中執行sql語句:

自行封裝執行結果:

Django之ORM執行原生sql語句

django 中的orm 提供的操作功能有限,在模型提供的查詢 api不能滿足實際工作需要時,可以在 orm中直接執行原生sql語句。django 提供兩種方法使用原生sql進行查詢 一種是使用raw 方法,進行原生sql查詢並返回模型例項 另一種是完全避開模型層,直接執行自定義的sql語句。raw...

Django執行原生SQL

hey,各位小夥伴,這次怎麼來玩一下,如何使用django執行原生sql 我們都知道,python在web界的扛把子,django,可謂是集大成為統一,各種各樣的外掛程式,forms元件,model模型,admin後台 反正就是乙個字,nb 本次就來學一下,如何在django執行原生語句 在使用dj...

django執行原生sql

一 orm row 方法 只能實現查詢 d list models.article.objects.raw select nid,count nid as num,strftime y m create time as ctime from blog article where user id st...