psycopg2.OperationalError:FATAL:数据库不存在

时间:2017-04-25 01:30:44

标签: python postgresql psycopg2

我试图在服务器中使用psycopg2填充几个数据库我不是root用户(不知道它是否相关)。我的代码看起来像

import json
from  psycopg2 import connect

cors = connect(user='jungal01', dbname='course')
req = connect(user="jungal01", dbname='requirement')

core = cors.cursor()
reqs = req.cursor()

with open('gened.json') as gens:
    geneds = json.load(gens)

for i in range(len(geneds)):
    core.execute('''insert into course (number, description, title)
                    values({0}, {1}, {2});''' .format(geneds[i]["number"], geneds[i]['description'], geneds[i]['title'] ))

reqs.execute('''insert into requirement (fulfills)
                values({0});''' .format(geneds[i]['fulfills'] ))
db.commit()

当我执行代码时,我得到上面的pycopg2错误。我知道这些特定的数据库存在,但我无法弄清楚为什么它不能连接到我的数据库。 (副任务,我也不确定那个提交语句。它应该在for循环中还是在for循环之外?它假设是特定于数据库的?)

3 个答案:

答案 0 :(得分:1)

艾伦,你说:“在postgres中,表格是数据库。”这是绝对错误的。您的错误消息是由于这种误解造成的。您希望连接到数据库,并插入该数据库中存在的表中。您正试图插入数据库 - 一个荒谬的操作。

答案 1 :(得分:1)

首先,db不是已定义的变量,因此您的代码无论如何都不应该完全运行。

  这个服务器上的

\ list是一堆充满用户名的数据库,我的用户名是一个

然后以下是你应该如何连接。对于数据库而言,不是表,而常规模式是将数据库名称,然后是用户/传递。

A"架构"在关系数据库中是一个松散的术语。表和数据库都有模式,但您似乎希望连接到表而不是数据库。

因此,尝试使用此代码尝试修复缩进和SQL注入问题 - See this documentation

请注意,您首先必须在要连接的数据库中创建两个表。

import json
from  psycopg2 import connect

username = 'jungal01'
conn = connect(dbname=username, user=username)
cur = conn.cursor()

with open('gened.json') as gens:
    geneds = json.load(gens)

    for g in geneds:
        cur.execute('''insert into course (number, description, title)
                        values(%(number)s, %(description)s, %(title)s);''', g)

        cur.execute('''insert into requirement (fulfills)
                    values(%(fulfills)s);''', g)
    conn.commit()

答案 2 :(得分:0)

确保您将目录名称作为数据库名称,而不是目录下的架构。

目录令人困惑,而且非常不必要。更多详情如下:What's the difference between a catalog and a schema in a relational database?