gpt4 book ai didi

python - 如何在 pandas python 的 read_sql 'where in' 子句中传递元组

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:47 25 4
gpt4 key购买 nike

我在 read_sql 方法中传递一个转换为字符串的元组作为

sql = "select * from table1 where col1 in " + str(tuple1) + " and col2 in " + str(tuple2)

df = pd.read_sql(sql, conn)

这工作正常,但是,当元组只有一个值时,sql 失败并显示 ORA-00936:缺少表达式,因为单个元素元组有一个额外的逗号

例如

tuple1 = (4011,)
tuple2 = (23,24)

形成的sql如下

select * from table1 where col1 in (4011,) + " and col2 in (23,24)
^
ORA-00936: missing expression

除了用字符串操作删除逗号之外,还有什么更好的方法吗?

有没有更好的方法来参数化 read_sql 函数?

最佳答案

您收到错误的原因是 SQL 语法。

当你有一个 WHERE col in (...) 列表时,尾随逗号会导致语法错误。

无论哪种方式,使用字符串连接将值放入 SQL 语句都是不受欢迎的,并且最终会导致您遇到更多问题。

大多数 Python SQL 库都允许参数化查询。在不知道您使用哪个库进行连接的情况下,我无法链接确切的文档,但是 psycopg2 的原理是相同的:

http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries

此功能也在 pd.read_sql 中公开,因此要安全地实现您想要的,您可以这样做:

sql = "select * from table1 where col1 in %s and col2 in %s"

df = pd.read_sql(sql, conn, params = [tuple1, tuple2])

关于python - 如何在 pandas python 的 read_sql 'where in' 子句中传递元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46039492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com