我正在使用psycopg2
从Python3执行PostgreSQL查询。我有几个结果没有任何问题。但是,我无法获得数据库的名称,编码和所有者。这是我的代码:
dbname = 'my_database'
query_get_db_data = (
'SELECT d.datname, d.datctype, '
'pg_catalog.pg_get_userbyid(d.datdba) as owner '
'FROM pg_catalog.pg_database d '
'WHERE d.datname = (%s);'
)
result = conn.cursor.execute(query_get_db_data, (dbname, ))
我做错了什么?提前谢谢。
修改
对不起我的错误,我因其他原因得到了无,真正的错误是我收到了这条消息:
“'my_database'或其附近的语法错误”第4行:WHERE d.datname = ( 'my_new_database')
我试图删除括号,但问题是引号。有什么想法吗?
答案 0 :(得分:0)
尝试从%s 周围删除括号。 paren 语法用于IN
而不是=
。
另外,我建议你利用 Python 的内置多行字符串,这样你就不必在每一行都添加所有这些单引号。< / p>
即
query_get_db_data = """
SELECT d.datname, d.datctype,
pg_catalog.pg_get_userbyid(d.datdba) as owner
FROM pg_catalog.pg_database d
WHERE d.datname = %s"""
result = conn.cursor.execute(query_get_db_data, (dbname, ))
修改强>
我刚刚注意到你说你试过去除parens,然后报价是一个问题。这似乎不应该是一个问题。删除引号后,您得到的错误是什么?当我尝试运行该查询时(针对 Postgres 9.0 服务器),当我删除parens时它可以正常运行。但是,这是在 psql 中。可能我认为这有一个 Python 3.x 方面,虽然我无法想到3.x与2.x之间的任何不同之处在这种情况下。 (除非您的DB名称中包含扩展的ASCII字符?)