我试图在服务器中使用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循环之外?它假设是特定于数据库的?)
答案 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?