校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > django執行原生SQL查詢的實現

django執行原生SQL查詢的實現

熱門標簽:西青語音電銷機器人哪家好 成都呼叫中心外呼系統哪家強 旅游廁所地圖標注怎么弄 百應電話機器人總部 地圖標注與注銷 宿州電話機器人哪家好 無錫智能外呼系統好用嗎 南昌地圖標注 電梯新時達系統外呼顯示e

執行原生 SQL 查詢

Django 允許你用兩種方式執行原生 SQL 查詢:

  • 你可以使用 Manager.raw() 來 執行原生查詢并返回模型實例。
  • 或者完全不用模型層 直接執行自定義 SQL。

1、執行原生查詢

管理器方法 raw() 能用于執行原生 SQL 查詢,就會返回模型實例:

Manager.raw(raw_query, params=None, translations=None)

該方法接受一個原生 SQL 查詢語句,執行它,并返回一個 django.db.models.query.RawQuerySet 實例。這個 RawQuerySet 能像普通的 QuerySet 一樣被迭代獲取對象實例。

1.1 普通查詢

class Person(models.Model):
    first_name = models.CharField(...)
    last_name = models.CharField(...)
    birth_date = models.DateField(...)

然后你可以像這樣執行自定義 SQL:

for p in Person.objects.raw('SELECT * FROM app_person'): # django默認的表名是app名加類名
    print(p)
​# 沒有查詢到就報錯

1.2 將查詢字段映射為模型字段

raw() 字段將查詢語句中的字段映射至模型中的字段。
查詢語句中的字段排序并不重要。換而言之,以下兩種查詢是一致的:

Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM app_person')

Person.objects.raw('SELECT last_name, birth_date, first_name, id FROM app_person')

匹配是根據名字來的。這意味著你可以使用 SQL 的 AS 子句將查詢語句中的字段映射至模型中的字段。所以,若你還有一些數據表包含了 Person 數據,你可以很方便的將其映射至 Person 實例:

>>> Person.objects.raw('''SELECT first AS first_name,
...                              last AS last_name,
...                              bd AS birth_date,
...                              pk AS id,
...                       FROM app_person''')

只要名字對上了,模型實例就會被正確創建。

或者,你可以用 raw() 的 translations 參數將查詢語句中的字段映射至模型中的字段。這是一個字典,將查詢語句中的字段名映射至模型中的字段名。例如,上面的查詢也能這樣寫:

>>> name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'}
>>> Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)

1.3 索引查詢

raw() 支持索引,所以,若你只需要第一個結果就這樣寫:

>>> first_person = Person.objects.raw('SELECT * FROM app_person')[0]

1.4 將參數傳給 raw()

如果你需要執行參數化的查詢,可以使用 raw() 的 params 參數:

>>> lname = 'Doe'
>>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])

params 是一個參數字典。你將用一個列表替換查詢字符串中 %s 占位符,或用字典替換 %(key)s 占位符(其中, key 理所應當由字典 key 替換),不論你使用哪個數據庫引擎。這些占位符會被 params 參數的值替換。
!!!必須以列表形式傳入參數,格式一定是這樣寫,不能寫成字符串

2、直接執行自定義 SQL

繞過模型層。

對象 django.db.connection 代表默認數據庫連接。要使用這個數據庫連接,調用 connection.cursor() 來獲取一個指針對象。然后,調用 cursor.execute(sql, [params]) 來執行該 SQL 和 cursor.fetchone(),或 cursor.fetchall() 獲取結果數據。

from django.db import connection
​
def my_sql(self):
    with connection.cursor() as cursor:
        cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
        cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
        row = cursor.fetchone()
​
    return row

要避免 SQL 注入,你絕對不能在 SQL 字符串中用引號包裹 %s 占位符。
注意,若要在查詢中包含文本的百分號,你需要在傳入參數使用兩個百分號:

cursor.execute("SELECT foo FROM bar WHERE baz = '30%%' AND id = %s", [self.id])

2.1 指定連接數據庫

用 django.db.connections 獲取指定數據庫的連接(和指針)。 django.db.connections 是一個類字典對象,它允許你通過連接別名獲取指定連接:

from django.db import connections
with connections['my_db_alias'].cursor() as cursor:

 到此這篇關于django執行原生SQL查詢的實現的文章就介紹到這了,更多相關django執行原生SQL查詢內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • django執行原始查詢sql,并返回Dict字典例子
  • 在Django的模型中執行原始SQL查詢的方法

標簽:辛集 渭南 七臺河 雅安 濰坊 西安 贛州 許昌

巨人網絡通訊聲明:本文標題《django執行原生SQL查詢的實現》,本文關鍵詞  django,執行,原生,SQL,查詢,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《django執行原生SQL查詢的實現》相關的同類信息!
  • 本頁收集關于django執行原生SQL查詢的實現的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    777色狠狠一区二区三区| 久久蜜臀中文字幕| 国内外精品视频| 亚洲自拍偷拍九九九| 久久综合精品国产一区二区三区| www.欧美.com| 狠狠色狠狠色综合系列| 亚洲综合自拍偷拍| 欧美激情在线一区二区| 91精品国产入口| 91在线视频在线| 国产一区视频导航| 日本中文在线一区| 一片黄亚洲嫩模| 综合久久给合久久狠狠狠97色| 久久这里只有精品6| 91精品久久久久久久91蜜桃| 色噜噜狠狠成人网p站| 丁香激情综合五月| 国产一区二区三区不卡在线观看 | 中文字幕佐山爱一区二区免费| 亚洲欧洲国产日韩| 欧美激情一区不卡| 狠狠色丁香久久婷婷综合丁香| 中文字幕中文字幕一区二区| 日本aⅴ亚洲精品中文乱码| 在线播放91灌醉迷j高跟美女| 26uuu亚洲综合色欧美| 色婷婷久久99综合精品jk白丝 | 天天综合色天天综合色h| 1024精品合集| 国产三级欧美三级| 精品国产sm最大网站免费看| 欧美高清视频www夜色资源网| 91麻豆国产香蕉久久精品| 成人免费的视频| 成人综合婷婷国产精品久久蜜臀| 狠狠色狠狠色综合系列| 久久精品72免费观看| 麻豆一区二区三| 青青草原综合久久大伊人精品 | 久久综合九色综合欧美98| 欧美一级视频精品观看| 欧美日韩高清在线播放| 欧美日韩国产小视频| 欧美日韩一区二区在线观看| 欧美性xxxxxxxx| 777色狠狠一区二区三区| 欧美婷婷六月丁香综合色| 色综合久久中文字幕| 一本色道**综合亚洲精品蜜桃冫| 91麻豆国产香蕉久久精品| 色综合天天狠狠| 91久久人澡人人添人人爽欧美| 91久久精品国产91性色tv| 在线观看91av| 欧美一区二区三区四区久久| 4438x成人网最大色成网站| 欧美一区二区三区不卡| 337p粉嫩大胆噜噜噜噜噜91av| 久久久久久久久99精品| 欧美国产禁国产网站cc| 成人欧美一区二区三区黑人麻豆 | 免费看欧美女人艹b| 精彩视频一区二区三区| 国产精品白丝av| 99免费精品在线观看| 91浏览器打开| 欧美精品粉嫩高潮一区二区| 欧美一级一区二区| 日本一二三不卡| 亚洲综合激情另类小说区| 免费高清成人在线| 高清不卡一二三区| 在线中文字幕不卡| 日韩精品一区二区三区蜜臀| 国产欧美日韩视频一区二区| 一区二区三区在线免费视频| 蜜桃视频在线观看一区| 懂色av一区二区三区蜜臀| 欧美在线观看视频在线| 日韩欧美aaaaaa| 日韩理论片在线| 蜜桃视频第一区免费观看| 国产成人免费视频网站| 欧美私模裸体表演在线观看| 久久综合九色欧美综合狠狠| 亚洲视频一二区| 蜜臀av国产精品久久久久| 国产成人av电影在线| 欧美午夜片在线看| 久久亚洲精品国产精品紫薇| 亚洲男同性视频| 寂寞少妇一区二区三区| 91丨porny丨户外露出| 欧美本精品男人aⅴ天堂| 亚洲天堂av老司机| 韩日欧美一区二区三区| 欧美亚洲综合一区| 国产精品免费久久久久| 蜜臀av亚洲一区中文字幕| 日韩丝袜美女视频| 亚洲最大成人综合| aaa亚洲精品一二三区| 欧美成人一区二区三区在线观看| 亚洲欧美电影一区二区| 国产成人a级片| 精品少妇一区二区三区免费观看 | 国产欧美一区视频| 麻豆一区二区99久久久久| 欧美日韩一区二区三区不卡| 国产精品久99| 成人一级片网址| 精品美女在线观看| 爽爽淫人综合网网站| 91啪亚洲精品| 中文字幕在线播放不卡一区| 国产在线精品一区二区| 欧美一区二区在线播放| 亚洲超丰满肉感bbw| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲gay无套男同| 色爱区综合激月婷婷| 国产精品久久久久久久第一福利| 韩国女主播成人在线| 日韩一区二区三区在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 久久国产三级精品| 欧美久久久久久久久久| 亚洲一区二区高清| 色视频成人在线观看免| 亚洲精品视频在线观看免费 | 精品少妇一区二区三区在线播放| 日日夜夜精品视频天天综合网| 欧美伊人久久久久久久久影院 | 日韩制服丝袜先锋影音| 欧美日韩国产一区二区三区地区| 亚洲国产欧美另类丝袜| 欧美午夜一区二区三区| 亚洲一区影音先锋| 欧美日韩亚洲综合在线| 亚洲一级二级在线| 欧美日韩国产美| 日韩精品免费专区| 日韩欧美成人一区| 国产乱码精品一区二区三区av | 成人欧美一区二区三区小说| 91同城在线观看| 亚洲欧美国产三级| 亚洲精品国产无天堂网2021| 亚洲大片免费看| 91精品国产综合久久久久久漫画 | 成人爱爱电影网址| 亚洲欧美色综合| 欧美亚洲综合网| 视频在线在亚洲| 日韩精品在线一区二区| 激情文学综合插| 国产欧美视频一区二区| 色网站国产精品| 水野朝阳av一区二区三区| 精品剧情在线观看| 成人app网站| 亚洲成人精品在线观看| 日韩免费性生活视频播放| 国产大片一区二区| 亚洲另类在线视频| 4438x成人网最大色成网站| 黄色精品一二区| 亚洲精品福利视频网站| 91精品国产综合久久久久| 国产精品中文字幕日韩精品| 亚洲视频一区二区在线观看| 欧美老女人第四色| 国产精品影音先锋| 亚洲精品免费视频| 日韩精品中文字幕一区二区三区 | 国产精品一二二区| 亚洲精品国产无天堂网2021| 日韩免费视频一区二区| 91在线观看视频| 久久精品噜噜噜成人av农村| 日本一区二区三区四区在线视频 | 日韩精品一区二区三区中文不卡 | 一区二区三区四区高清精品免费观看 | 紧缚奴在线一区二区三区| 最新欧美精品一区二区三区| 日韩午夜电影av| 一本大道av伊人久久综合| 久久国产精品99久久人人澡| 亚洲欧美综合网| 欧美一级免费观看| av中文字幕不卡| 亚洲成a人v欧美综合天堂| 国产精品免费观看视频| 在线91免费看| 成人av午夜电影| 国产一区二区调教| 亚洲综合精品自拍| 26uuu久久综合|