1

我正在尝试遍历字典并附加到字符串 - 这是代码:

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' 我的问题是该结果的末尾有一个“和”。

如何在没有最后一个 and 的情况下运行那个 for 循环?

任何帮助,将不胜感激。

4

2 回答 2

5

使用该str.join()方法将字符串与' 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 风格),有些?用作占位符。

于 2013-08-30T11:12:57.490 回答
2

在 for 循环的末尾添加此语句,该语句从查询语句中删除 and。

if myquery.endswith('and'):
   myquery = myquery[:-3]
于 2013-08-30T11:13:54.467 回答