【问题标题】:How to export a CSV to sql server database properly?如何正确将 CSV 导出到 sql server 数据库?
【发布时间】:2019-12-31 07:59:29
【问题描述】:

我正在尝试将 CSV 文件导出到 sql server 数据库。我检查了 StackOverflow 上的一些问题,但没有一个对我有用。以下是我的代码:

import csv
import pymssql

connection = pymssql.connect(server='testdb.mammoth.io', user='mammoth', 
    password='jugular$35', database='samplelivedb', port=1433)

cur = connection.cursor()
cur.execute('create table sometable1(col1 varchar(20), col2 varchar(20))')
with open('batch1.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    table_name = 'sometable1'
    columns = next(reader) 
    query = 'insert into {0}({1}) values ({2})'
    query = query.format(table_name, ','.join(columns), ','.join('?' * len(columns)))
    print(query) # INSERT INTO sometable1(one1, two1) values(?,?)
    print("query is {0}".format(query))
    for data in reader:
        print(data) # ['b1col1', ' b1col1']
        cur.execute(query, data)
connection.commit()
connection.close()

我收到一个错误,“ValueError: 'params' arg () can be only a tuple or a dictionary.”

现在如果我修改

"cur.execute(query, data)"

"cur.execute(query, tuple(data))"

它给出了另一个错误:

"pymssql.ProgrammingError: (102, b"'?'.DB-Lib 错误消息 20018 附近的语法不正确,严重性 15:\n一般 SQL Server 错误:检查来自 SQL Server 的消息\n")"

将csv导出到sql server的正确方法是什么?

【问题讨论】:

  • 已编辑。问题是,如果我替换“?” with ['%'] - 表示查询将是“INSERT INTO sometable1(one1, two1) values(%s,%s)”,在这种情况下它可以工作,但我可能不会将所有列都作为字符串,有些可能是整数或日期
  • 读取mysql-index-passing-parameter mysql 使用% 而不是?

标签: python sql-server pymssql


【解决方案1】:

我很确定你的 data = next(reader) 不应该在那里,而只有 columns = next(reader)。 我在这里有一个工作示例;

with open ('example.csv', 'r') as f:
    reader = csv.reader(f)
    columns = next(reader)
    query = 'INSERT INTO exampleTable({0}) values({1})'
    query = query.format(','.join(columns),  ','.join('?' * len(columns)))
    cursor = connection.cursor()
    for data in reader:
        cursor.execute(query, data)
    cursor.commit()
connection.close()

【讨论】:

  • 是的,“data = next(reader)”不应该在那里。我正在编辑我的问题。您的示例也引发了我在问题中提到的错误:“ValueError: 'params' arg () can be only a tuple or dictionary.”
  • @HarisMuzaffar 你不应该编辑它,如果你让你的问题成为人们更容易提供帮助 - 至少是代码部分。您是否尝试过创建表格并将其填充到单独的文件中?只是为了例如首先检查桌子是否真的在制作。
猜你喜欢
  • 2012-12-13
  • 2021-04-04
  • 2015-04-22
  • 2012-09-16
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
相关资源
最近更新 更多