尝试将csv加载到数据库中。
def csvtolist(path):
with open(path, 'r') as f:
reader = csv.reader(f)
return list(map(tuple,reader))
for file in os.listdir(directory):
filename = os.fsdecode(file)
params =csvtolist(os.path.join(os.fsdecode(directory), filename))
print(params)
cursor.executemany("INSERT into PRODUCTSTRUCTURE values (?,?,?,?,?,?,?,?);",params)
我得到并且错误,因为序列包含换行符:
cursor.executemany("INSERT into PRODUCTSTRUCTURE values (?,?,?,?,?,?,?,?);",params)
pyodbc.ProgrammingError: ('The SQL contains 8 parameter markers, but 9 parameters were supplied', 'HY000')
print(params)
与不需要的第9个\n
的序列示例:
('MilhoSP', 'BR001', '', '', '', '', '', '', '\n')
答案 0 :(得分:2)
只做
cursor.executemany("INSERT into PRODUCTSTRUCTURE values (?,?,?,?,?,?,?,?);",params[:-1])
params[:-1]
可以获得除最后一个之外的所有内容,在您的情况下是第9个。
<强>替代:强>
根据有用的评论,使用params[0:8]
将始终为您提供8个元素。即使CSV文件更改了列数,这也是未来的证据。
答案 1 :(得分:0)
在将参数传递给SQL语句之前,您可以执行类似的操作:
params = tuple(x for x in params if x != '\n')