Как вставить данные Python / Pandas в нормализованную базу данных - PullRequest
0 голосов
/ 17 марта 2020

Скажем, у меня есть 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)

Я хочу вставить фрейм данных в таблицу событий, но я хочу, чтобы он сохранил связанный идентификатор для каждого столбца, а не необработанный текст. Есть ли способ легко сделать это через SQLAlchemy (или другие пакеты RDBMS или ORM), или мне нужно go строка за строкой и установить переменные, такие как

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

В качестве альтернативы, это лучший способ справиться с этим через базу данных? Я мог бы выполнить это sh, вставив необработанные данные pandas непосредственно в промежуточную таблицу, а затем разделить точки данных на соответствующие таблицы, используя SQL.

Это кажется выполнимым, я просто смотрю, есть ли более эффективное решение через Python?

Бонус (возможно, отдельный) вопрос, как бы я go о вводе нового значения в таблицы, когда оно встречается ( т.е. df.User отсутствует в таблице Users, поэтому я хочу INSERT INTO Users VALUES ...)

...