0

データのフェッチに python と MYSQL を使用しています。これは基本的な質問ですが、見つけることができません。

例のようなPythonの辞書から生成されたIDのリストがありました

dic = {'1': u'', '3': u'', '2': u'', '4': u''}
lis_ids = dic.keys()

query = "SELECT * FROM File_upload where id IN %s" % [int(i) for i in a]

print query 

結果

"SELECT * FROM File_upload where id IN [1, 3, 2, 4]"

実際には以下のようになるはずなので、上記の結果は構文エラーを表示します

"SELECT * FROM File_upload where id IN (1, 3, 2, 4)"

リストからIDを取得しているため、Pythonでリストをタプルに変換する方法。

編集されたコード

実際、これは私が得た2番目のシナリオです

私が持っている口述は

dic = {'submit': u'', '1': u'', '3': u'', '2': u'', '4': u'', 'groups': {}}
lis_ids = dic.keys()

実際にはリストsubmitgroupsも入りますが、IDとして整数キーのみが必要です

だから私もこの機能を実装したいif not len(key) > 1 take the key

以下のように、このすべての機能を1行で実装できる人はいますか?

4

2 に答える 2

3

これを試して:

dic = {'submit': u'', '1': u'', '3': u'', '2': u'', '4': u'', 'groups': {}}
list_ids = [elem for elem in dic.keys() if elem.isdigit()]

query = "SELECT * FROM File_upload where id IN (%s)" % ','.join(list_ids)

print query
于 2012-11-16T08:02:01.217 に答える
2

これを試して:

query = "SELECT * FROM File_upload where id IN %s" % str(tuple(int(i) for i in a))

(str()残念ながら、この呼び出しは必須です。呼び出しがないと TypeError が返されます。)


整数に変換可能なキーだけを取得したい場合は、これを試してください:

def only_numbers(seq):
    for i in seq:
        try:
            yield int(i)
        except ValueError:
            pass

query = "SELECT * FROM File_upload where id IN %s" % str(tuple(only_numbers(dic.keys())))

各キーを整数に変換し、何もせずにエラーを処理する必要があるため、それほど単純ではありません。そのため、その部分を処理するジェネレータ関数が必要です。

于 2012-11-16T07:44:01.763 に答える