【发布时间】:2018-11-27 12:47:26
【问题描述】:
我有一张要插入数据库的 Excel 工作表。我写了一个 Python 脚本,它接受一个 Excel 文件,将其转换为 CSV,然后将其插入到数据库中。
问题是数据库包含两个表,其中一个具有唯一 ID,该 ID 是自动生成的,并在数据插入表时设置。另一个表使用它作为外键。
这就是我的表的创建方式:
create table table (
id uuid DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
foo1 varchar(255),
foo2 varchar(255),
foo3 varchar(255),
foo4 varchar(255)
);
create table another_table (
id uuid PRIMARY KEY references table (id)
foo1 varchar(255),
foo2 varchar(255)
);
这是我用来将数据插入数据库的代码:
with open(csv_file, 'rb') as f:
reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
next(reader)
for row in reader:
cur.execute(
"INSERT INTO table (foo1, foo2, foo3, foo4) VALUES (%s, %s, %s, %s); ",
"INSERT INTO another_table (foo1, foo2) VALUES (%s, %s),
row
)
conn.commit()
这会将数据插入数据库,但 another_table 中的 ID 字段将为空。 有谁知道我如何获取此 ID 并将其放入第二个表中?
【问题讨论】:
-
你可能需要稍微改变你的逻辑。这是一种方法:1)使用(foo1,foo2)创建一个临时表。 2) 在 t.foo1 = tmp.foo1 和 t.foo2 = tmp.foo2 上加入表 t 得到对应的 uuid。 3) 插入到 another_table (t.uuid, t.foo1, t.foo2)。这假设 foo1 和 foo2 对是唯一的。
标签: python sql postgresql pandas csv