首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pg8000中使用%通配符

在pg8000中使用%通配符
EN

Stack Overflow用户
提问于 2016-02-01 16:15:23
回答 2查看 3.1K关注 0票数 7

我有一个类似于下面的查询:

代码语言:javascript
复制
def connection():
    pcon = pg8000.connect(host='host', port=1234, user='user', password='password', database = 'database')
    return pcon, pcon.cursor()

pcon, pcur = connection()
query = """ SELECT * FROM db WHERE (db.foo LIKE 'string-%' OR db.foo LIKE 'bar-%')"""
db = pd.read_sql_query(query, pcon)

但是,当我试图运行代码时,我得到:

DatabaseError: '%'' not supported in a quoted string within the query string

我尝试用\和附加%转义符号,但没有运气。如何让pg8000正确地将其视为通配符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-01 16:32:06

在Python中,%通常指字符串后面的变量。如果您想要一个文字百分比符号,那么您需要加倍它。%%

-- 来源

代码语言:javascript
复制
LIKE 'string-%%'

否则,如果不起作用,PostgreSQL也支持用于模式匹配的下划线

代码语言:javascript
复制
'abc' LIKE 'abc'    true
'abc' LIKE 'a%'     true
'abc' LIKE '_b_'    true

但是,正如评论中提到的,

pattern中的下划线(_)表示(匹配)任何单个字符;百分比符号(%)匹配任何零个或多个字符的序列

但是,根据源代码,问题似乎是LIKE语句中的%后面的单引号。

代码语言:javascript
复制
if next_c == "%":
    in_param_escape = True
else:
    raise InterfaceError(
        "'%" + next_c + "' not supported in a quoted "
        "string within the query string")

因此,如果next_c == "'"而不是next_c == "%",那么您将得到错误

代码语言:javascript
复制
'%'' not supported in a quoted string within the query string
票数 3
EN

Stack Overflow用户

发布于 2021-04-04 10:12:33

使用最新版本的pg8000,您应该不会对LIKE中的%有任何问题。例如:

代码语言:javascript
复制
>>> import pg8000.dbapi
>>>
>>> con = pg8000.dbapi.connect(user="postgres", password="cpsnow")
>>> cur = con.cursor()
>>> cur.execute("CREATE TEMPORARY TABLE book (id SERIAL, title TEXT)")
>>> for title in ("Ender's Game", "The Magus"):
...     cur.execute("INSERT INTO book (title) VALUES (%s)", [title])
>>>
>>> cur.execute("SELECT * from book WHERE title LIKE 'The %'")
>>> cur.fetchall()
([2, 'The Magus'],)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35135173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档