python第三方庫系列之十一--django.db的connection庫

來源:互聯網
上載者:User

標籤:python   django   sql   like   cursor object has no   

    平時用django去向資料庫中讀寫資料都是用的Model,直接molel.objects.filter(Q())或者model.objects.get(Q())等讀取資料。然而這樣的Q()查詢SQL語句就必須符合django ORM的規範,今天想總結的是用connection庫和原生的SQL語句讀寫資料庫。
from django.db import connectionSQL_str = "select * from book"cursor = connection.cursor()cursor.execute(SQL_str)domain_and_record_db_datas = cursor.fetchall()
    今天碰到一個特別奇葩的問題,修複了一下午才得以解決,就是SQL語句中的LIKE方法。看看一下是怎麼演變的:

1. 平時的LIKE方法是:

SQL_str = "select * from book where name LIKE 'xxx'"

這條語句相當於:
SQL_str = "select * from book where name = 'xxx'"
2. 為了模糊查詢,應該這樣:
SQL_str = "select * from book where name LIKE '%xxx%'"
3. 但在python中,“%”是一個特殊字元,需要兩個“%%”才表示一個“%”,所以寫成這樣:

SQL_str = "select * from book where name LIKE '%%xxx%%'"print SQL_str# select * from book where name LIKE '%xxx%'

如果寫成這樣,列印出來的SQL語句是可以在SQL命令列下啟動並執行,但在我的django中會報出以下錯誤:

'Cursor' object has no attribute '_last_executed'
我在網上找了很久,都說只要加上“%%”就行,我的就是報錯。於是我大膽的加上了“%%%%”,告訴編譯器我這個是百分比符號,居然OK了!
4. 總結,在django中如果加上2個“%”還報錯,就加上4個“%”,所以寫成這樣:

from django.db import connectionSQL_str = "select * from book where name LIKE '%%%%xxx%%%%'"cursor = connection.cursor()cursor.execute(SQL_str)domain_and_record_db_datas = cursor.fetchall()
成功了!

python第三方庫系列之十一--django.db的connection庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.