psycopg2.OperationalError:致命:数据库不存在

2024-06-01 00:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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循环中,还是在循环之外?它应该是特定于数据库的?)


Tags: 代码coreimport数据库jsonconnectrequirementreq
2条回答

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

目录是混乱的和相当不必要的。更多细节如下:What's the difference between a catalog and a schema in a relational database?

首先,您拥有的db不是一个定义的变量,因此您的代码不应该完全运行。

\list on this server is a bunch of databases full of usernames, of which my username is one

下面是你应该如何连接。对于一个数据库,而不是一个表,通常的模式是输入数据库名,然后输入user/pass。

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

因此,请尝试以下代码,尝试修复缩进和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()

相关问题 更多 >