溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django中運(yùn)用sql語(yǔ)句查詢數(shù)據(jù)庫(kù)的方法

發(fā)布時(shí)間:2020-11-06 09:19:46 來(lái)源:億速云 閱讀:290 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI