ОБНОВИТЬ или ВСТАВИТЬ Фрейм данных Pandas в таблицу SQL Server - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть фрейм данных, с помощью которого я хочу обновить или вставить таблицу в SQL Server.Мои данные выглядят следующим образом.Данные содержат около 95 тыс. Строк.

ДАННЫЕ НИЖЕ:

data = 
       ContactabilityScore DayofTheWeek CallBlockStartTime CallBlockEndTime  \
    0                    0       Monday                  8                9   
    1                    1      Tuesday                  8                9   
    2                    1    Wednesday                  8                9   
    3                    0     Thursday                  8                9   
    4                    0       Friday                  8                9   
    5                    2       Monday                  8                9   
    6                    8      Tuesday                  8                9   
    7                    3    Wednesday                  8                9   
    8                    4     Thursday                  8                9   
    9                    0       Friday                  8                9   


  Season    LoadDate  ContactId           TimeZone BatchNumber  AccountId  
0   Fall  2018-09-24  1-1008KJJ  Pacific Time Zone    24092018  1-1008KK9  
1   Fall  2018-09-24  1-1008KJJ  Pacific Time Zone    24092018  1-1008KK9  
2   Fall  2018-09-24  1-1008KJJ  Pacific Time Zone    24092018  1-1008KK9  
3   Fall  2018-09-24  1-1008KJJ  Pacific Time Zone    24092018  1-1008KK9  
4   Fall  2018-09-24  1-1008KJJ  Pacific Time Zone    24092018  1-1008KK9  
5   Fall  2018-09-24  1-100AROM  Eastern Time Zone    24092018  1-100AROS  
6   Fall  2018-09-24  1-100AROM  Eastern Time Zone    24092018  1-100AROS  
7   Fall  2018-09-24  1-100AROM  Eastern Time Zone    24092018  1-100AROS  
8   Fall  2018-09-24  1-100AROM  Eastern Time Zone    24092018  1-100AROS  
9   Fall  2018-09-24  1-100AROM  Eastern Time Zone    24092018  1-100AROS 

У меня есть промежуточная таблица в SQL Server, где может существовать ContactId.Таким образом, если это ContactId существует, то UPDATE ContactabilityScore, если нет, INSERT строка фрейма данных.Ниже моя попытка, и я не уверен, является ли это правильным способом.

КОД НИЖЕ:

conn = connection('insert')
curr = conn.cursor()
curr.fast_executemany=True

print("\nScorig process began at %s" %(str(datetime.datetime.now())))
print("Starting Insert of %s rows" %(len(data)))

SQL_UPDATE = """UPDATE [dbo].[STG_TABLE]
                SET [ContactabilityScore]=?, [LoadDate]=?
                WHERE [ContactId]=? AND [CallBlockStartTime]=?
                        AND [CallBlockEndTime]=? AND [DayofTheWeek]=? AND [Season]=?"""

SQL_INSERT = "INSERT INTO [dbo].[STG_TABLE] VALUES (?" + ",?"*(data.shape[1]-1) + ")"

res = curr.executemany(SQL_UPDATE, tuple(map(list, data[['ContactabilityScore', 'LoadDate', 'ContactId','CallBlockStartTime'
                                    ,'CallBlockEndTime','DayofTheWeek','Season']].values)))

if res.rowcount==0:
    curr.executemany(SQL_INSERT, tuple(map(list, data.values)))

Я не уверен,это сделает UPSERT правильно.Какой правильный способ сделать это, если я не хочу перебирать каждую строку фрейма данных и отрабатывать весь фрейм данных.Я очень ценю вашу помощь.

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