【问题标题】:Import CSV to SQL Express using Python使用 Python 将 CSV 导入 SQL Express
【发布时间】:2019-04-30 03:32:22
【问题描述】:

我正在尝试获取一个 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")

“年份”是我要在其中放入数据的列。

谢谢。

【问题讨论】:

  • 可以在执行之前打印query吗?

标签: python sql csv


【解决方案1】:

好的,我找到了使用 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)。

干杯

【讨论】:

  • T-SQL 中有一个函数YEAR()。当您在查询字符串中将 'Year' 作为文字传递时,服务器可能会将其解释为尝试的函数调用。如果您在查询字符串中使用escape the column names,它应该可以工作:",".join(map(lambda x: "[{}]".format(x), columns))。不过,这只是一种预感;我自己无法测试。
猜你喜欢
  • 2012-03-13
  • 2017-02-15
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多