django中的ORM提供的操作功能有限,在模型提供的查詢API不能滿足實際工作需要時,可以在ORM中直接執行原生sql語句。
Django 提供兩種方法使用原生SQL進行查詢:一種是使用raw()方法,進行原生SQL查詢並返回模型實例;另一種是完全避開模型層,直接執行自定義的SQL語句。
raw()方法執行原生sql語句:
# raw()方法執行原生sql(調用的類名不區分是誰,只要存在均可執行)
ret=models.Book.objects.raw('select * from app01_book')
# ret=models.Publish.objects.raw('select * from app01_book')
for book in ret:
print(book.book_name)
# print(book.__dict__)
直接執行自定義原生sql語句:
#直接執行自定義原生sql(完全避開模型層,類似pymysql操作)
from django.db import connection
cursor=connection.cursor()
cursor.execute('select * from app01_book')
ret=cursor.fetchall()
print(ret)#((2, '小時光', Decimal('10.00'), 2), (3, '未來可期', Decimal('33.00'), 1), (4, '打破思維里的牆', Decimal('11.00'), 2), (5, '時光不散', Decimal('11.00'), 3))