如何使用psycopg2在Python3中获取PostgreSQL数据库信息?

时间:2014-05-08 09:13:41

标签: postgresql python-3.x psycopg2

我正在使用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')

我试图删除括号,但问题是引号。有什么想法吗?

1 个答案:

答案 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字符?)