Ошибка при вставке записей со значениями Null в SQL Server с использованием Pymssql - PullRequest
0 голосов
/ 17 октября 2018

У меня есть набор записей, которые мне нужно вставить в базу данных сервера Sql с помощью pymssql.Эти записи имеют оценки вероятности из прогнозирующей модели вместе с кучей других столбцов.Для целей тестирования я создал файл excel со значениями, которые я хочу вставить в таблицу MS Sql Server.

Некоторые записи в этих столбцах имеют нулевые значения, которые вызывают проблемы при попытке их вставить.

Ниже приведен мой код

import pymssql
import pandas as pd

conn = pymssql.connect(server='server name', user='uid', password='pwd', 
database='dbname')
cursor=conn.cursor()

#Read Scores from Excel
df = pd.read_excel("Sample_Score_Records.xlsx")

for index,row in df.iterrows():
    cursor.execute("INSERT INTO dbo.ANLY_SCORE([id],[scoredatetime],[score1],[score2],[model_name],[score_id],[updated_revenue_ind]) 
values(%s,%d,%d,%d,%s,%s,%s)", (row['id'],row['scoredatetime'],row['score1'],row['score2'],row['model_name'],row['score_id'],row['updated_revenue_ind']))
    conn.commit()
conn.close()

Код работает нормально, когда я полностью удаляю столбцы с нулевыми значениями из оператора вставки, но при включении возвращаю приведенную ниже ошибку.

Ошибка:

ProgrammingError: (207, "Invalid column name 'nan'.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n")

Ниже приведены мои данные

ID  scoredatetime   Score1  Score2  Model Name  Score_id    updated_revenue_ind
0015CF3EE2  10/17/2018 11:22:04 AM  0.2564859   0.365465    Model1  sana87y47164    y
0015CF3EE3  10/17/2018 11:22:04 AM  0.215485    0.458962    Model1  sana87y47165    n
0015CF3EE4  10/17/2018 11:22:04 AM  0.3458963   0.145893    Model1  sana87y47166    NULL
0015CF3EE5  10/17/2018 11:22:04 AM  0.265489    0.987513    Model1  sana87y47167    y
0015CF3EE6  10/17/2018 11:22:04 AM  0.324896    0.154787    Model1  sana87y47168    y
0015CF3EE7  10/17/2018 11:22:04 AM  0.386492    0.482172    Model1  sana87y47169    y
0015CF3EE8  10/17/2018 11:22:04 AM  0.2489714   0.897562    Model1  sana87y47170    y
0015CF3EE9  10/17/2018 11:22:04 AM  0.402365    0.147851    Model1  sana87y47171    n
0015CF3EE10 10/17/2018 11:22:04 AM  0.380236    0.278968    Model1  sana87y47172    NULL
0015CF3EE11 10/17/2018 11:22:04 AM  0.361245    0.478938    Model1  sana87y47173    NULL

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 19 октября 2018

Неверное имя столбца 'nan'

Проблема в том, что pandas не хранит нулевые значения как Python None, он сохраняет их как NaN.pymssql, похоже, смущен этим.

Возможно, вам следует просто установить SQLAlchemy и затем использовать df.to_sql для вставки строк:

from sqlalchemy import create_engine
# ...

#Read Scores from Excel
df = pd.read_excel("Sample_Score_Records.xlsx")

# rename one DataFrame column to match table column name
df.rename({'Model Name': 'model_name'}, axis='columns', inplace=True)

# insert rows
engine = create_engine('mssql+pymssql://uid:pwd@servername/dbname')
df.to_sql('ANLY_SCORE', engine, schema='dbo', if_exists='append', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...