如何使用pyodbc将dataframe中的列插入到sqlserver中?

2024-06-06 20:14:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将CSV(或数据帧)中的数据插入MS SQL Server。 表已经创建好了,我使用pyodbc在SQL中创建了列。在

我试图用DataFrame中的一列填充表中的第一列,但出现以下错误:

Error: ('07002', '[07002] [Microsoft][ODBC SQL Server Driver]COUNT field incorrect or syntax error (0) (SQLExecDirectW)')

我尝试添加一个不同的列,看看是否是该列的问题,我得到了相同的错误。(列中没有空值。)

conn = pyodbc.connect("Driver={SQL Server};" 
                      "Server=natsqldevap2ncr\ins2;"
                      "Database=ECDWDEV;"
                      "Trusted_Connection=yes;")

for i in df.iloc[:,0]:
    insert_query1 =  """INSERT INTO TABLE_NAME(COLUMN_NAME) 
                   VALUES 
                   (?)"""

    cursor = conn.cursor()
    result = cursor.execute(insert_query1)
    conn.commit()

应为列中的所有值(测向仪[:,0]),插入到SQL表“table_NAME”的列“column_NAME”。在

取而代之的是:

Error: ('07002', '[07002] [Microsoft][ODBC SQL Server Driver]COUNT field incorrect or syntax error (0) (SQLExecDirectW)')


Tags: 数据namefieldsqlserverdrivercount错误
1条回答
网友
1楼 · 发布于 2024-06-06 20:14:25

您得到错误消息是因为您试图使用参数化查询,但没有将参数传递给execute方法。在

此外,不需要通过在显式的for循环中调用execute来逐行插入。您可以使用executemany代替:

# test data
df = pd.DataFrame(
    [(1, 'Josh', 10000), (2, 'Michael', 5000), (3, 'Sara', 8000)],
    columns=['id', 'name', 'salary'])
#
crsr = cnxn.cursor()
crsr.fast_executemany = True
sql = "INSERT INTO Table_1 (id) VALUES (?)"
# extract column and convert to list of single-value tuples
data = [(x,) for x in df['id']]
crsr.executemany(sql, data)
cnxn.commit()

相关问题 更多 >