2011-11-30 54 views
1

是否有可能在Django中構建原始SQL查詢以便它們接受動態數量的參數?因此,例如說,我有我的應用程序中使用下列網址結構:Django:使用動態變量數量的原始SQL查詢

/books/category/history/ 
/books/category/history/1800s/ 

對於第一個查詢,我在尋找與關鍵字「歷史」的所有書籍,併爲第二,我期待對於所有關鍵字爲「history」和關鍵字「1800s」的圖書。

我現在必須爲每個這兩個單獨的查詢:

keyword1 = 'history' 
SELECT appname_book.name AS name FROM appname_book WHERE keyword=%s,[keyword1] 

keyword1 = 'history' 
keyword2 = '1800s' 
SELECT appname_book.name AS name FROM appname_book WHERE keyword=%s AND keyword=%s,[keyword1, keyword2] 

人知道一個更清潔,更有效的方式來做到這一點?

我正在使用Django 1.3和MySQL。

謝謝。

回答

2

你爲什麼不使用Django的QuerySet,像這樣:

Book.objects.all().filter(keyword__in=['history','1800s']).values('name') 

使用RAW SQL另一種可能的解決方案,coud是:

keywords = [] 
SQL = 'SELECT appname_book.name AS name FROM appname_book WHERE 1=1 ' 
SQL += ' '.join(['AND keyword=%s' for _ in params]) 
+0

感謝,這將是理想的,但對於很多其他我必須寫我自己的SQL的原因。 –

+0

謝謝,這很好! –