您好,登錄后才能下訂單哦!
小編給大家分享一下Django中運(yùn)用sql語(yǔ)句查詢數(shù)據(jù)庫(kù)的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
下面是一個(gè)簡(jiǎn)單的例子。
from django.db import connection def my_custom_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
如果你項(xiàng)目中有多個(gè)數(shù)據(jù)庫(kù)的話,django.db.connection也能很方便的選取數(shù)據(jù)庫(kù)。django.db.connections 是一個(gè)類字典的結(jié)構(gòu),允許你使用數(shù)據(jù)庫(kù)別名獲取connection。
from django.db import connections with connections['my_db_alias'].cursor() as cursor: # Your code here...
使用with作為上下文管理器:
with connection.cursor() as c: c.execute(...)
和下面這段代碼等效
c = connection.cursor() try: c.execute(...) finally: c.close()
注意的問(wèn)題:
如果你做了更新或者插入操作需要在代碼中使用 :transaction.commit_unless_managed() 來(lái)提交數(shù)據(jù)?;蛘呤褂檬聞?wù)裝飾器(例如 commit_on_success)來(lái)修飾視圖和提供事務(wù)控制數(shù)據(jù)提交。這樣就不用在代碼中調(diào)用transaction.commit_unless_managed()。但是,如果你不手動(dòng)提交修改,你需要使用 transaction.set_dirty() 將事務(wù)標(biāo)識(shí)為已臟。使用 Django ORM 對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改時(shí),Django 會(huì)自動(dòng)調(diào)用 set_dirty() 。但如果你使用了原始 SQL ,Django 就無(wú)法獲得你的 SQL 是否修改了數(shù)據(jù)。只有手動(dòng)調(diào)用 set_dirty() 才能確保 Django 知曉哪些修改必須被提交。
from django.db.transaction import commit_on_success @commit_on_success def my_custom_sql_view(request, value): from django.db import connection, transaction cursor = connection.cursor() # Data modifying operation cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [value]) # Since we modified data, mark the transaction as dirty transaction.set_dirty() # Data retrieval operation. This doesn't dirty the transaction, # so no call to set_dirty() is required. cursor.execute("SELECT foo FROM bar WHERE baz = %s", [value]) row = cursor.fetchone() #transaction.commit_unless_managed() return render_to_response('template.html', {'row': row})
以上是Django中運(yùn)用sql語(yǔ)句查詢數(shù)據(jù)庫(kù)的方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。