django中三種實現原生態的SQL方式

2021-09-24 03:22:39 字數 1313 閱讀 7055

django中能用orm的就用它orm吧,不建議執行原生sql,可能會有一些安全問題,

如果實在是sql太複雜orm實現不了,那就看看下邊執行原生sql的方法,跟直接使用pymysql基本一致了

from  django.db  import connection

with connection.cursor() as cursor

cursor.excute('select * from accounts_user')

row = cursor.fetchall()

return row

with connection.cursor() as cursor:

cursor.execute("select * from publisher")

#得到表的屬性列表

columns = [col[0] for col in cursor.description]

#zip函式將連個元組進行整合,在用dict函式將其變成字典

res = [dict(zip(columns, row)) for row in cursor.fetchall()]

print(res)

raw:執行原始sql並返回模型例項

1.使用extra:查詢人民郵電出版社出版並且**大於50元的書籍

book.objects.filter(publisher__name=『人民郵電出版社』).extra(where=[『price>50』])

2.使用raw

books=book.objects.raw('select * from hello_book')

for book in books:

print book

3.自定義sql

from django.db import connection 

cursor = connection.cursor()

cursor.execute("insert into hello_author(name) values ('郭敬明')")

cursor.execute("update hello_author set name='韓寒' where name='郭敬明'")

cursor.execute("delete from hello_author where name='韓寒'")

cursor.execute("select * from hello_author")

cursor.fetchone()

cursor.fetchall()

原生js實現繼承的三種方式

function parent name,age function child name,age,gender const ming newchild ming 18 男 console.log ming 2 原型鏈繼承 優點 實現了原型物件內的函式復用.缺點 雖然得到了屬性值,但無法在例項物件內靈...

C 中三種new的用法

string ps new string abc 上面這個new表示式完成了兩件事情 申請記憶體和初始化物件。new操作符類似於c語 言中的malloc,只是負責申請記憶體,例如 void buffer operator new sizeof string 注 意這裡多了乙個operator。這是n...

css水平垂直居中三種實現方法

方法一 使用dispaly inline block 和 vertical align 還有偽類實現 block1 block1 before center1 方法二 使用相對定位或者固定定位和transform來實現。ie8及以下不支援 block2 center2 方法三 使用display t...