python - 如何将 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 ...
)
解决方案
推荐阅读
- c - crypt() 不返回标准 MD5 哈希?
- c++ - asio::strand 的副本会创建一个新的执行程序吗?
- node.js - Firebase 函数错误:默认的 Firebase 应用不存在
- python - 我的 Numpy 数组中有一个列表,但我不能在 Keras 中使用它
- php - wp_remote_request 和 cURL 不起作用
- sql - INSERT INTO SELECT 和其他数据
- sql-server - .rdlx 文件是否与 .rdl 报告文件相同
- c# - 使用 Moq 在 C# 中对特定的 MongoDb FilterDefintion 进行单元测试
- c++ - 在不复制此变量或互斥变量的情况下访问类成员
- button - 是否可以在片段中添加 On Click Button 方法?