为了账号安全,请及时绑定邮箱和手机立即绑定

SQL查询中的Python列表作为参数

SQL查询中的Python列表作为参数

慕森卡 2019-07-20 09:49:50
SQL查询中的Python列表作为参数我有一张蟒蛇名单,比如说我l = [1,5,8]我想编写一个SQL查询来获取列表中所有元素的数据,比如select name from students where id = |IN THE LIST l|我该如何做到这一点?
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

到目前为止,答案是将值模板为普通的SQL字符串。对于整数来说,这是绝对可以的,但是如果我们想对字符串这样做,我们就会得到转义问题。

下面是一个使用参数化查询的变体,这两个查询都可以使用:

placeholder= '?' # For SQLite. See DBAPI paramstyle.placeholders= ', '.join(placeholder for unused in l)query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)


查看完整回答
反对 回复 2019-07-20
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

不要把它复杂化,解决这个问题很简单。

l = [1,5,8]l = tuple(l)params = {'l': l}cursor.execute('SELECT * FROM table where id in %(l)s',params)

我希望这能帮上忙!


查看完整回答
反对 回复 2019-07-20
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

您想要的SQL是

select name from studens where id in (1, 5, 8)

如果您想要从python构建这个结构,您可以使用

l = [1, 5, 8]sql_query = 'select name from studens where id in (' + ','.join(map(str, l)) + ')'

这个地图函数将列表转换为字符串列表,这些字符串可以通过逗号使用加入方法。

另一种选择是:

l = [1, 5, 8]sql_query = 'select name from studens where id in (' + ','.join((str(n) for n in l)) + ')'

如果你愿意生成器表达式映射函数。

最新情况:S.Lott注释中提到PythonSQLite绑定不支持序列。在这种情况下,你可能想

select name from studens where id = 1 or id = 5 or id = 8

产生于

sql_query = 'select name from studens where ' + ' or '.join(('id = ' + str(n) for n in l))


查看完整回答
反对 回复 2019-07-20
  • 3 回答
  • 0 关注
  • 991 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信