在Django的模型中執(zhí)行原始SQL查詢的方法
有時(shí)候你會(huì)發(fā)現(xiàn)Django數(shù)據(jù)庫API帶給你的也只有這么多,那你可以為你的數(shù)據(jù)庫寫一些自定義SQL查詢。 你可以通過導(dǎo)入django.db.connection對(duì)像來輕松實(shí)現(xiàn),它代表當(dāng)前數(shù)據(jù)庫連接。 要使用它,需要通過connection.cursor()得到一個(gè)游標(biāo)對(duì)像。 然后,使用cursor.execute(sql, [params])來執(zhí)行SQL語句,使用cursor.fetchone()或者cursor.fetchall()來返回記錄集。 例如:
>>> 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,你可以訪問` http://www.python.org/peps/pep-0249.html <http://www.python.org/peps/pep-0249.html>`__來獲取更多信息。 如果你對(duì)Python DB-API不熟悉,請(qǐng)注意在cursor.execute() 的SQL語句中使用`` “%s”`` ,而不要在SQL內(nèi)直接添加參數(shù)。 如果你使用這項(xiàng)技術(shù),數(shù)據(jù)庫基礎(chǔ)庫將會(huì)自動(dòng)添加引號(hào),同時(shí)在必要的情況下轉(zhuǎn)意你的參數(shù)。
不要把你的視圖代碼和django.db.connection語句混雜在一起,把它們放在自定義模型或者自定義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)文章
Python 使用os.remove刪除文件夾時(shí)報(bào)錯(cuò)的解決方法
下面小編就為大家?guī)硪黄狿ython 使用os.remove刪除文件夾時(shí)報(bào)錯(cuò)的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
Python實(shí)現(xiàn)調(diào)度算法代碼詳解
這篇文章主要介紹了Python實(shí)現(xiàn)調(diào)度場算法代碼詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-12-12
Python3+RIDE+RobotFramework自動(dòng)化測試框架搭建過程詳解
這篇文章主要介紹了Python3+RIDE+RobotFramework自動(dòng)化測試框架搭建過程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Python自動(dòng)化運(yùn)維之Ansible定義主機(jī)與組規(guī)則操作詳解
這篇文章主要介紹了Python自動(dòng)化運(yùn)維之Ansible定義主機(jī)與組規(guī)則操作,結(jié)合實(shí)例形式分析了自動(dòng)化運(yùn)維工具Ansible定義主機(jī)與組規(guī)則相關(guān)配置操作與注意事項(xiàng),需要的朋友可以參考下2019-06-06
python list中append()與extend()用法分享
列表是以類的形式實(shí)現(xiàn)的?!皠?chuàng)建”列表實(shí)際上是將一個(gè)類實(shí)例化。因此,列表有多種方法可以操作2013-03-03
在python image 中安裝中文字體的實(shí)現(xiàn)方法
今天小編大家分享一篇在python image 中安裝中文字體的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
PyQt5實(shí)現(xiàn)仿QQ貼邊隱藏功能的實(shí)例代碼
這篇文章主要介紹了PyQt5實(shí)現(xiàn)仿QQ貼邊隱藏功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
python GUI庫圖形界面開發(fā)之pyinstaller打包python程序?yàn)閑xe安裝文件
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之pyinstaller打包python程序?yàn)閑xe安裝文件,需要的朋友可以參考下2020-02-02

