2011-11-30 53 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

谢谢,这很好! –