假设我有一个 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 不在用户表中,所以我想INSERT INTO Users VALUES ...
)