使用 postgres/Python 选择撇号
Posted
技术标签:
【中文标题】使用 postgres/Python 选择撇号【英文标题】:Apostrophe in select with postgres/Python 【发布时间】:2020-08-13 11:42:51 【问题描述】:我正在尝试查看数据库中是否已有项目。但是我不知道如何选择其中带有撇号(')的名称。
我尝试过使用 adapt, %s(根本不起作用)。 :item 语法也不起作用。
下面的选择将导致
Exception has occurred: ProgrammingError
(psycopg2.errors.SyntaxError) syntax error at or near "s"
LINE 1: select * from items where name = 'Akunda's Bite'
# CODE
str_sql = text(f"select * from items where name = 'item_name'")
results = self.conn.execute(str_sql).fetchone()
【问题讨论】:
【参考方案1】:不要使用 (f-) 字符串格式,而是使用 DB-API 的 parameter substitution method:
str_sql = text("select * from items where name = %s;")
results = self.conn.execute(str_sql, (item_name,)).fetchone()
注意,值必须作为序列传递;特别是tuple
或list
。字符串是一个序列,但字符串中的每个字符都将被解释为查询的不同值,这将导致
TypeError:字符串格式化期间并非所有参数都转换
被抚养。
【讨论】:
这不需要元组。 str_sql = "select * from items where name = %s" results = self.conn.execute(str_sql, item_name).fetchone() 那么item_name
必须是元组或列表。
如果我将字符串“Akunda's Bite”作为第二个参数传递给execute
,我会得到TypeError: not all arguments converted during string formatting
。以上是关于使用 postgres/Python 选择撇号的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中,如何创建包含引号和撇号的 mySQL 选择查询?