加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何从Python中删除SQL查询字符串中的引号?

发布时间:2020-12-20 12:00:06 所属栏目:Python 来源:网络整理
导读:我有一个数据库名称字典.我从字典中取名 database_name = database_dict[i] 假设database_name的值是’foo’ 使用Psycopg2我正在执行一个语句: cur.execute("INSERT INTO %s VALUES(...);",database_name) 我在foo得到一个语法错误,因为它应该是“INSERT IN
我有一个数据库名称字典.我从字典中取名

database_name = database_dict[i]

假设database_name的值是’foo’

使用Psycopg2我正在执行一个语句:

cur.execute("INSERT INTO %s VALUES(...);",database_name)

我在foo得到一个语法错误,因为它应该是“INSERT INTO foo VALUES”而不是“INSERT INTO’foo’VALUES”

任何建议如何传递表名称的字符串值并删除单引号?我应该在我的数据库字典值中放置一个转义字符吗?

编辑:更接近的是:How do I remove single quotes from a table in postgresql?

但我无法使用REMOVE让它工作.它在remove语句中的单引号中给出了语法错误.

解决方法

当您在cursor.execute(query,params)的第二个参数中尝试时,无法对SQL查询的结构组件(如表和字段名称)进行参数化.只能参数化数字/文字数据值.

考虑将database_name变量插入到SQL查询字符串中,但使用带有str.format的psycopg2的sqlIdentifier()安全地执行此操作:

from psycopg2 import sql
...

cur.execute(sql.SQL('INSERT INTO {} VALUES(...)').format(sql.Identifier(database_name)))

在您的情况下,有效的parameterizaiton将绑定VALUES(…)中传递的数据值,如VALUES(%s,%s,%s).或者在其他查询中:

"SELECT %s AS NewColumn..."

"...WHERE fieldname = %s OR otherfield IN (%s,%s,%s)"

"...HAVING Max(NumColumn) >= %s"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读