Python:将数据从CSV插入数据库,然后从表中选择生成的UUID



我有一张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()

这将向数据库中插入数据,但另一个表中的ID字段将为空有人知道我如何获取这个ID并将其放入第二个表中吗

我能够自己解决这个问题,而无需对代码进行太多调整。我不得不解决我的代码中的另一个问题,csv文件中的几个值为null,但转换为csv使它看起来像是空字符串。通过使用pandas,我可以将所有空值设置为"None",然后在将每一行插入数据库之前对其进行清理:

with open(csv_file, 'rb') as f:
reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
next(reader)
for row in reader:
clean_row = []
for x in row:
if x == "None":
clean_row.append(None)
else:
clean_row.append(x)
cur.execute(
"INSERT INTO table (foo1, foo2, foo3, foo4) VALUES (%s, %s, %s, %s); ",
"INSERT INTO another_table (foo1, foo2) VALUES (%s, %s),
clean_row
)
conn.commit()

csv中的值现在被放入一个数组中,我可以在查询中使用它来询问表的id,如下所示:

with open(csv_file, 'rb') as f:
reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
next(reader)
for row in reader:
clean_row = []
for x in row:
if x == "None":
clean_row.append(None)
else:
clean_row.append(x)
cur.execute(
"INSERT INTO table (foo1, foo2, foo3, foo4) VALUES (%s, %s, %s, %s); ",
"INSERT INTO another_table (foo1, foo2, id) VALUES (%s, %s, SELECT id FROM table WHERE "
"foo1 = '" + clean_row[0] + "' AND foo2 = '" + clean_row[1] + "')),
clean_row
)
conn.commit()

这将获取ID并将其放入另一个表中,只要u在表中具有唯一值,就可以完成。

最新更新