我有一个场景,用户将一组csv文件上传到我的应用程序,表格与一对多关系相关。
示例:
档案1,人员:
ref, birthyear, gender, weight,
"L300", 1983, M, 65,
"L301", 1983, F, 78,
文件2,活动:
ref, activityStart, activityEnd,
"L300", 31Aug2014 23:00, 01Sep2014 00:00,
"L300", 31Aug2014 23:30, 02Sep2014 00:00,
"L300", 01Sep2014 07:00, 03Sep2014 00:00,
"L301", 31Aug2014 19:00, 01Sep2014 00:00,
"L301", 31Aug2014 22:30, 01Sep2014 00:00,
活动和人员的主键是自动增量整数,活动表具有外键列person_id。
目前我正在使用SQLAlchemy ORM来创建实体,但是当记录数量很大时,性能非常糟糕。
我想要做的是生成在上传这些记录时插入这些记录所需的SQL,但是我在确定如何处理外键时遇到了问题。我不能先插入人员然后通过在“ref”列上查询来获取“id”,因为“ref”列仅对当前文件集是唯一的,而不是对整个数据库唯一。
我目前正在使用sqlite数据库作为后端,但正在寻找postgres进行制作。
我认为这应该是一个非常常见的情况,我想知道是否有人对如何解决这个问题有任何好的想法?
答案 0 :(得分:1)
我不确定如何在SQLite中解决,但在Postgres中,我认为您只需要使用RETURNING ID
子句进行插入。从插入的PostgreSQL文档:
将单行插入表分发器,返回序列 DEFAULT子句生成的数字:
INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
RETURNING did;