2012-11-16 59 views
-1

我使用Python和MYSQL用于读取数据的多个ID记录,我知道这是一个基本的问题,但我无法找到它。如何选择与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

所以任何人都可以在一行中实现所有这些功能如下?如果你想只取属于按键;(你会得到一个类型错误,而不需要它的str()电话,很可惜。)


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

回答

2

试试这个兑换为整数,试试这个:

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

这并不简单,因为你必须尝试转换将每个关键字都设为一个整数,并通过不做任何事情来处理错误,所以我们需要一个生成器函数来处理它的那部分内容。

+0

哇非常感谢你还我编辑的代码,请看看它 –

+0

更新我的答案。 – cdhowie

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

更新了第二种情况。 –

+0

这适用于某些情况,但如果list_ids中存在元字符,该怎么办? –

+0

例如''123;'。isdigit()'返回false,然后不进入列表,这就是你所说的@JayElston? –