使用python测试postgresql数据库时出错

时间:2014-09-21 20:26:33

标签: python sql postgresql

我想开始在python中使用数据库。我选择postgresql作为数据库"语言"。我已经创建了几个数据库,但现在我只想检查数据库是否存在python。为此,我已经阅读了这个答案:Checking if a postgresql table exists under python (and probably Psycopg2)并尝试使用他们的解决方案:

import sys
import psycopg2

con = None

try:
    con = psycopg2.connect(database="testdb", user="test", password="abcd")
    cur = con.cursor()
    cur.execute("SELECT exists(SELECT * from information_schema.testdb)")
    ver = cur.fetchone()[0]
    print ver
except psycopg2.DatabaseError, e:
    print "Error %s" %e
    sys.exit(1)
finally:
    if con:
        con.close()

但不幸的是,我只得到输出

Error relation "information_schema.testdb" does not exist
LINE 1: SELECT exists(SELECT * from information_schema.testdb)

我做错了什么,还是我错过了什么?

2 个答案:

答案 0 :(得分:2)

你的问题让我感到困惑,因为你说你想看看数据库是否存在,但你查看了information_schema.tables视图。该视图将告诉您当前打开的数据库中是否存在表。如果要检查数据库是否存在,假设您可以访问“postgres”数据库,则可以:

import sys
import psycopg2, psycopg2.extras
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
dbname = 'db_to_check_for_existance'
con = None

try:
    con = psycopg2.connect(database="postgres", user="postgres")
    cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cur.execute("select * from pg_database where datname = %(dname)s", {'dname': dbname })
    answer = cur.fetchall()
    if len(answer) > 0:
        print "Database {} exists".format(dbname)
    else:
        print "Database {} does NOT exist".format(dbname)
except Exception, e:
    print "Error %s" %e
    sys.exit(1)
finally:
    if con:
        con.close()

这里发生的是您正在查找名为pg_database的数据库表。列'datname'包含每个数据库名称。您的代码将提供db_to_check_for_existance作为要检查存在的数据库的名称。例如,您可以用'postgres'替换该值,您将得到'exists'答案。如果用aardvark替换该值,您可能会得到不存在的报告。

答案 1 :(得分:1)

如果您正在尝试查看数据库是否存在:

curs.execute("SELECT exists(SELECT 1 from pg_catalog.pg_database where datname = %s)", ('mydb',))

听起来你可能会对数据库和表之间的区别感到困惑。