【发布时间】:2014-12-08 03:51:59
【问题描述】:
我有一个场景,用户将一组 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。
我认为这应该是一个很常见的情况,我想知道是否有人对如何解决这个问题有任何好的想法?
【问题讨论】:
-
通常你知道插入记录的PK(你从persons开始),比如sqlite中的last_insert_rowid(),然后用它来插入记录到活动中。还是您现在正在使用相同的想法并且对您来说非常慢?
-
我希望运行一个大的 executemany 语句,但我会尝试这个选项,看看性能是否足够好。谢谢!
标签: python sqlite postgresql sqlalchemy