首页 > 解决方案 > 如何将 Python/Pandas 数据插入规范化数据库

问题描述

假设我有一个 Pandas 数据框,其中包含以下记录:

Time    Action      User    Company    User2
---------------------------------------------------
00:02   buy share   msmith  ACME       tjones
00:03   sell share  tjones  Alpha      msmith
...

我有一个带有表的数据库:

ActionType (ID INT IDENTITY(1,1), Name VARCHAR)

Users (ID INT IDENTITY(1,1), Username VARCHAR, CompanyID INT FOREIGN KEY)

Companies (ID INT IDENTITY(1,1), CompanyName VARCHAR)

Events (ID INT IDENTITY(1,1), ActionID INT FOREIGN KEY, UserID INT FOREIGN KEY, CompanyID INT FOREIGN KEY, User2ID INT FOREIGN KEY)

我想将数据框插入事件表中,但我希望它存储每列的关联 ID,而不是原始文本。有没有办法通过 SQLAlchemy(或其他 RDBMS 或 ORM 包)轻松做到这一点,还是我需要逐行设置变量,例如

userid = session.query(Users).filter(Users.Username == df.User) 

或者,是通过数据库处理这个问题的最佳方法吗?我可以通过将原始 pandas 数据直接插入“暂存”表中来完成此操作,然后使用 SQL 将数据点拆分到各自的表中。

这似乎可行,我只是想看看是否有通过 Python 更有效的解决方案?

奖金(可能是单独的)问题,当遇到新值时,我将如何在表中输入新值(即 df.User 不在 Users 表中,所以我想INSERT INTO Users VALUES ...

标签: pythonsqlpandassqlalchemydatabase-normalization

解决方案


推荐阅读