вставить в таблицу SQL, используя panda dataframe - PullRequest
0 голосов
/ 29 апреля 2019

Я создаю общую функцию в своем классе БД, которая принимает в качестве параметра фрейм данных и вставляет данные в одну таблицу. Я хочу, чтобы эта функция была повторно использована в других модулях, так как большинство других модулей вставляются в эту таблицу. Я думал, чтобы проверить, если датафрейм не имеет столбец для вставки, а затем вставить ноль в столбце. Должен ли я добавить дополнительный столбец к моему фрейму данных, но это означает редактирование моего исходного фрейма данных и добавление дополнительных столбцов с нулевыми значениями, или другой способ - просто пропустить имя столбца в моей вставке, которое будет вставлять нуль (столбцы обнуляются) в таблицу. Каков наилучший способ достижения этого, учитывая возможность многократного использования и применение важных объектно-ориентированных концепций?

1 Ответ

0 голосов
/ 29 апреля 2019

Вы можете сделать это довольно легко, если ваши таблицы не слишком большие, следуя следующему потоку:

Вы можете сделать это довольно легко, если ваши таблицы не слишком большие, следуя следующему потоку:

ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have

for i in list(tb.columns):
    if i in list(ta.columns):
        pass
    else:
        ta[i] = 'NULL'

tconso = ta.append(tb)
tconso.to_sql('table', engine, if_exists='replace')

ОБНОВЛЕНИЕ

поскольку вы утверждаете, что ваши данные большие, то вы можете изменить таблицу непосредственно в sql, выполняя добавление снаружи:

1) импортировать ваши библиотеки

import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, func, event
from sqlalchemy.sql import text
from urllib.parse import quote_plus

2) соединение:

params = urllib.parse.quote_plus(r'...')
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine = create_engine(conn_str, echo=True)

3) выполнить запрос, если столбец новый, и отправить таблицы после добавления новых столбцов:

ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have

for i in list(tb.columns):
    if i in list(ta.columns):
        pass
    else:
        query = text('ALTER TABLE [dbo].[table] ADD ' + i + ' VARCHAR(50)')
        connection = engine.connect()
        connection.execute(query)
        connection.close()

tb.to_sql('table', engine, if_exists=append)

С УДАЛЕНИЕМ НОВЫХ КОЛОНН ИЗ НОВОГО DF

ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have

for i in list(tb.columns):
    if i in list(ta.columns):
        pass
    else:
        tb.drop(columns=[i])

tb.to_sql('table', engine, if_exists=append)

Дайте мне знать, если это работает. BR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...