2013-08-30 119 views
1

我通過嘗試字典中循環,並追加到這裏與字符串是代碼:循環通過Python的字典

mylist= {'name':'james', 'age': '23', 'time': 'next'} 
myquery = "select * from players where" 
for k, v in mylist.items(): 
    myquery += "%s=%s and" % (k, v), 

print myquery 

這是打印'select * from maintable where age=23 and name=jame and time=next and' 我的問題是,有一個「和」在結果的結尾。

如何運行該循環沒有最後和?

任何幫助,將不勝感激。

回答

5

使用str.join() method' and '分隔符的加入字符串連接在一起:

myquery = "select * from players where {}".format(
    ' and '.join('{}={}'.format(k, v) for k, v in mylist.iteritems())) 

演示:

>>> mylist= {'name':'james', 'age': '23', 'time': 'next'} 
>>> "select * from players where {}".format(
...  ' and '.join('{}={}'.format(k, v) for k, v in mylist.iteritems())) 
'select * from players where age=23 and name=james and time=next' 

但是,它看起來好像你正在建設一個SQL查詢;不要在這種情況下,內插值,可以使用SQL參數來代替:

myquery = "select * from players where {}".format(
    ' and '.join('{}=?'.format(k) for k in mylist)) 

,然後使用cursor.execute(myquery, mylist.values())的參數傳遞給數據庫適配器。

檢查數據庫適配器使用的格式;有些使用%s(C sprintf樣式),其他使用?作爲佔位符。

+0

和sqlite3的(和其他一些)支持':name'不是/除了'%(名稱)s'風格參數逃逸 –

+0

感謝您的代碼 - 幫助。我喜歡加入方法 –

2

在for循環的結尾添加此語句,該語句從查詢語句中刪除和刪除。

if myquery.endswith('and'): 
    myquery = myquery[:-3] 
+0

嗨Srinivas,感謝代碼示例,它很好,很短,並且有幫助。 –