我使用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
那么任何人都可以在一行中实现所有这些功能,如下所示吗?
答案 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())))
这不是那么简单,因为你必须尝试将每个键转换为整数并通过什么都不做来处理错误,所以我们需要一个生成器函数来处理它的那一部分。