首页 > 解决方案 > 使用 Python 将 CSV 导入 SQL Express

问题描述

我正在尝试获取一个 csv 文件并使用 Python 将其导入 sql server express。我用谷歌搜索了这个问题,我看到的似乎对其他人有用的解决方案是:

import pymssql
import csv
conn = pymssql.connect(
    server="servername",
    user='username',
    password='password',
    database='db'
)
cursor = conn.cursor()
with open('new_csv_file.csv', 'r') as f:
    reader = csv.reader(f)
    columns = next(reader) 
    query = 'insert into MyTable({0}) values ({1})'
    query = query.format(','.join(columns), ','.join('?' * len(columns)))
    cursor = conn.cursor()
    for data in reader:
        values = map((lambda x: x.strip()), data)  # No need for the quote
        print(tuple(values))
        cursor.execute(query, tuple(values))
    cursor.commit()
conn.commit()
cursor.close()
print("Done")
conn.close()

我已经确认代码有效,只是“execute()”部分无效。查询没问题,但“值”给了我以下错误:

(102, b"Incorrect syntax near 'Year'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")

其中“年份”是我试图将数据放入的列。

谢谢。

标签: pythonsqlcsv

解决方案


好的,我找到了使用 sqlalchemy 和 pandas 的解决方法

import sqlalchemy

print('Creating Engine')
engine = sqlalchemy.create_engine('mssql+pymssql://username:password@localhost/db')
print('Reading Table')
df = pd.read_sql_table("table_name",engine)
print(df)
df_new = pd.read_csv('table_name_new.csv'%)
df_new.to_sql(name="table_name",
          con = engine,
          if_exists='replace'         
        )
df_test = pd.read_sql_table("table_name",engine)

如果有人确实发现了我的代码不起作用的原因,我仍然很感兴趣。我不知道这是否是 Python 3 问题(我使用的是 Python 3)。

干杯


推荐阅读