python - postgres 查询中的文字括号,pgadmin 与 psycopg2

标签 python postgresql pgadmin

以下查询从字符串中取出括号,即它用正则表达式将它们替换为空。当我在 pgAdimin III (1.12) 中测试它时,它按预期工作,但是当 python 脚本的一部分使用 psycopg2 时,它根本不会替换括号。

 SELECT
    regexp_replace(location.name, '\\(|\\)', '', 'g') AS host
 FROM
    location

我正在运行 python 2.7.1 和 psycopg2 2.3.2,我的操作系统是 SLES 11 SP1。

我希望在 pgAdmin 中运行的 postgres 查询会返回与在 psycopg2 中运行的查询完全相同的结果,或者这是一个错误的假设?如果需要,我可以提供数据,但 location.name 是一个字符串,例如

(goat) 172.10.x.x -> /var/log/messages

编辑:Python代码:

cursor.execute("""
     SELECT
        regexp_replace(location.name, '\\(|\\)', '', 'g') AS host
     FROM
        location
""") 

参数化参数看起来像答案。

最佳答案

使用参数化参数:

sql='SELECT regexp_replace(location, %s, %s, %s)  from foo'
cursor.execute(sql,[r'\(|\)','','g'])

例如:

import psycopg2
connection=psycopg2.connect(
    database=config.PGDB,
    host=config.HOST,
    password=config.PASS)
cursor=connection.cursor()
sql='CREATE TABLE foo (location varchar(40))'
cursor.execute(sql)
sql='INSERT INTO foo (location) VALUES (%s)'
cursor.execute(sql,['(goat) 172.10.x.x -> /var/log/messages'])
sql='SELECT * FROM foo'
cursor.execute(sql)
data=cursor.fetchall()
print(data)
# [('(goat) 172.10.x.x -> /var/log/messages',)]

sql='SELECT regexp_replace(location, %s, %s, %s) FROM foo'
cursor.execute(sql,[r'\(|\)','','g'])
data=cursor.fetchall()
print(data)
# [('goat 172.10.x.x -> /var/log/messages',)]

关于python - postgres 查询中的文字括号,pgadmin 与 psycopg2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736307/

相关文章:

python - Pandas:比较系列中的列表对象

ruby - 如何在没有原始 SQL 的情况下使用 Sequel 编写 PostgreSQL 查询?

python - 如何获取在 pgadmin 中创建的 postgresql 数据库的 url?

docker - 备份Dockerized PostgreSQL数据库

postgresql - PgAdmin 的 Kubernetes 持久卷挂载

python - 如果线程运行 webbrowser.open(),则无法使用 Ctrl-C 退出 Python 脚本

python - 我正在尝试使用 scipy.minimize 解决带有约束和界限的最大化问题

python - 如何将 "subprocess.call"的输出捕获到文件中?

PostgreSQL:如何测试时间戳是否有时区?

postgresql - 为具有多种元素种类的库存控制系统建模