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)"

我们如何在 python 中将列表转换为元组,因为我从列表中获取 id。

编辑代码

实际上这是我得到的第二种情况

我的字典是

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

实际上我们会得到submit并且groups也会进入列表,但我只想要整数键作为 id

所以我也想实现这个功能if not len(key) > 1 take the key

那么任何人都可以在如下一行中实现所有这些功能吗?

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 回答