我有一个我希望加入字符串的整数列表
ids = [1,2,3,4,5]
看起来像'Id = 1或Id = 2或Id = 3或Id = 4或ID = 5'
我现在有一个答案,但我认为获得小组的意见可能会很好
编辑:向不应该说的人提供更多信息...... 这不是直接生成SQL,这是动态表达式,它被发送到使用下面的Entity Framework的Ado.net数据服务层。当前,服务中的动态表达式处理程序/ EF4适配器不支持首选的IN子句,我暂时不得不求助于多个equals语句。
答案 0 :(得分:5)
" or ".join("id = %d" % id for id in ids)
答案 1 :(得分:1)
mystring = 'id =' + 'or id ='.join(str(i) for i in ids)
如果你想生成动态的sql,就像评论中指出的那样(不知道我是怎么错过的),你应该这样做
mystring = ' or '.join(['id = ?']*len(ids))
其中?
应替换为数据库库的相应转义序列。对于sqlite3,那是?
。对于MySQLdb,它使用printf代码IIRC。然后,您可以将id的列表作为第二个参数(通常)传递给光标,然后它将以安全的方式将它们放在那里。这总是正确的。