在Django的模型中執(zhí)行原始SQL查詢的方法
有時(shí)候你會(huì)發(fā)現(xiàn)Django數(shù)據(jù)庫(kù)API帶給你的也只有這么多,那你可以為你的數(shù)據(jù)庫(kù)寫(xiě)一些自定義SQL查詢。 你可以通過(guò)導(dǎo)入django.db.connection對(duì)像來(lái)輕松實(shí)現(xiàn),它代表當(dāng)前數(shù)據(jù)庫(kù)連接。 要使用它,需要通過(guò)connection.cursor()得到一個(gè)游標(biāo)對(duì)像。 然后,使用cursor.execute(sql, [params])來(lái)執(zhí)行SQL語(yǔ)句,使用cursor.fetchone()或者cursor.fetchall()來(lái)返回記錄集。 例如:
>>> from django.db import connection >>> cursor = connection.cursor() >>> cursor.execute(""" ... SELECT DISTINCT first_name ... FROM people_person ... WHERE last_name = %s""", ['Lennon']) >>> row = cursor.fetchone() >>> print row ['John']
connection和cursor幾乎實(shí)現(xiàn)了標(biāo)準(zhǔn)Python DB-API,你可以訪問(wèn)` http://www.python.org/peps/pep-0249.html <http://www.python.org/peps/pep-0249.html>`__來(lái)獲取更多信息。 如果你對(duì)Python DB-API不熟悉,請(qǐng)注意在cursor.execute() 的SQL語(yǔ)句中使用`` “%s”`` ,而不要在SQL內(nèi)直接添加參數(shù)。 如果你使用這項(xiàng)技術(shù),數(shù)據(jù)庫(kù)基礎(chǔ)庫(kù)將會(huì)自動(dòng)添加引號(hào),同時(shí)在必要的情況下轉(zhuǎn)意你的參數(shù)。
不要把你的視圖代碼和django.db.connection語(yǔ)句混雜在一起,把它們放在自定義模型或者自定義manager方法中是個(gè)不錯(cuò)的主意。 比如,上面的例子可以被整合成一個(gè)自定義manager方法,就像這樣:
from django.db import connection, models class PersonManager(models.Manager): def first_names(self, last_name): cursor = connection.cursor() cursor.execute(""" SELECT DISTINCT first_name FROM people_person WHERE last_name = %s""", [last_name]) return [row[0] for row in cursor.fetchone()] class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) objects = PersonManager()
然后這樣使用:
>>> Person.objects.first_names('Lennon') ['John', 'Cynthia']
相關(guān)文章
pytorch實(shí)現(xiàn)從本地加載 .pth 格式模型
今天小編就為大家分享一篇pytorch實(shí)現(xiàn)從本地加載 .pth 格式模型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Centos部署django服務(wù)nginx+uwsgi的方法
這篇文章主要介紹了Centos部署django服務(wù)nginx+uwsgi的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Linux下Pycharm、Anaconda環(huán)境配置及使用踩坑
這篇文章主要介紹了Linux下Pycharm、Anaconda環(huán)境配置及使用踩坑,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12在Django的模板中使用認(rèn)證數(shù)據(jù)的方法
這篇文章主要介紹了在Django的模板中使用認(rèn)證數(shù)據(jù)的方法,Django是最具人氣的Python web開(kāi)發(fā)框架,需要的朋友可以參考下2015-07-07聊聊Python對(duì)CSV文件的讀取與寫(xiě)入問(wèn)題
今天抽空給大家介紹下Python對(duì)CSV文件的讀取與寫(xiě)入問(wèn)題,首先需要在python環(huán)境里導(dǎo)入csv板塊,下面就通過(guò)實(shí)例代碼給大家詳細(xì)介紹下,感興趣的朋友跟隨小編一起看看吧2021-11-11