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」があることです。

最後の 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 に答える