我已经获得了一系列我想要的数字,并以逗号分隔的数字放入python列表或元组中。我一直在堆叠,但也许我找不到正确的方式来表达我的问题,因为我一直在寻找将元组转换为列表的方法,反之亦然。
这就是我所拥有的。我收到了一封电子邮件,里面有一系列数字列表(但还有几百个):
417985
417986
417987
417988
417989
417990
我将使用这些数字从数据库进行查询,所以:
NUMBER in (417985,417986,417987,417988,417989,417990)
有没有办法在python中转换这一系列的数字,以便我可以在查询中找到逗号分隔的值?仅供参考,我做了很多蟒蛇游戏,所以这就是我很有兴趣的地方,不过我会有兴趣听到任何其他方法。
答案 0 :(得分:2)
如果要在SQL查询中使用这些数字,则需要生成 SQL参数而不是构建查询字符串。
你已经读过你的行并把它变成一个整数的序列(列表会这样做):
numbers = [int(line) for line in email_lines]
然后,您为每个值生成一个包含足够占位符的查询:
statement = "SELECT * FROM table WHERE NUMBER IN ({0})".format(
', '.join(['?' * len(numbers)]))
我假设您使用的数据库连接器使用?
作为SQL参数占位符;它也可以是%s
。
现在您可以向数据库询问是否匹配行:
cursor.execute(statement, numbers)
通过使用SQL参数,您可以免费获得一些东西:
statement
查询,并可以将结果重用于后续查询。如果您想复制并粘贴这些数字,请输入:
email_lines = """\
<paste your lines with numbers>
""".splitlines()
然后将我的答案中的第一行应用于结果。
答案 1 :(得分:1)
这可能是你想要的吗?
raw = """417985
417986
417987
417988
417989
417990"""
numbers = [int(n) for n in raw.split()]
>> numbers_int
[417985, 417986, 417987, 417988, 417989, 417990]
或者如果你想构建一个字符串
numbers_str = [n for n in raw.split()]
>> ",".join(numbers_str)
'417985,417986,417987,417988,417989,417990'