如何从MYSQL数据库中选择具有多个ID的记录

时间:2012-11-16 07:39:22

标签: python mysql

我使用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()

实际上我们也会将submitgroups添加到列表中,但我只想要整数键作为ID

所以我也想实现像if not len(key) > 1 take the key

这样的功能

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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())))

这不是那么简单,因为你必须尝试将每个键转换为整数并通过什么都不做来处理错误,所以我们需要一个生成器函数来处理它的那一部分。