【发布时间】: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