使用 Python 进行 SQL 查询中的字符串替换
Posted
技术标签:
【中文标题】使用 Python 进行 SQL 查询中的字符串替换【英文标题】:String replacement in SQL Query using Python 【发布时间】:2014-11-20 11:25:54 【问题描述】:我在 SQL 中有两个查询,如下所示:
q1 = select date_hour from table
而且,第二个查询是:
q2 = select date(date_hour) from table
这些查询之间的唯一区别是字符串 date_hour 和 date(date_hour)。所以,我尝试用以下方式参数化我的查询:
q1 = select %s from table
cur.execute(q1,'date')
cur.execute(q1,'date(date_hour)')
但是,这会引发错误:
not all arguments converted during string formatting
为什么会出现此错误?我该如何解决?
【问题讨论】:
【参考方案1】:将cur.execute
中的逗号改为%
改变这个:
q1 = "select %s from table"
cur.execute(q1,'date')
cur.execute(q1,'date(date_hour)')
到:
q1 = "select %s from table"
cur.execute(q1 % 'date')
cur.execute(q1 % 'date(date_hour)')
【讨论】:
【参考方案2】:目前尚不清楚您使用的是哪个 sql 库,但假设它使用 Python DB API:
Sql 参数通常用于值,而不是列名(虽然这可以使用存储过程)。
您似乎对 python 中的字符串格式和 sql 参数化查询感到困惑。
虽然 %s 可用于格式化字符串(请参阅formatting strings),但这不是设置 sql 参数的方法。
查看this response在python中使用sql参数。
顺便说一句,我看不出这个简单的代码有什么问题:
cursor=cnx.curor()
query="select date_hour from table"
cursor.execute(query)
query="select date(date_hour) from table"
cursor.execute(query)
【讨论】:
我不希望同一个查询被写两次。这两个查询除了一个不同外完全相同。这就是为什么,我想参数化它们。 正如我所说的,参数用于值而不是列名。不过,如果您真的坚持使用相同的字符串,这应该可以解决问题:cur.execute('select %s from table1' % 'date_hour')
【参考方案3】:
把你的代码改成这样:
q1 = "select %s from table"
cur.execute(q1,['date'])
cur.execute(q1,['date(date_hour)'])
查看this
【讨论】:
以上是关于使用 Python 进行 SQL 查询中的字符串替换的主要内容,如果未能解决你的问题,请参考以下文章
使用 FROM 子句中的子查询进行联接操作中的 SQL 语法错误