【发布时间】:2019-03-06 13:43:53
【问题描述】:
在 Windows 7 上运行 Python 3.7.2 32 位并使用 pyodbc 包 4.0.25-cp27 32 位
我尝试了多种传递参数的方法并不断收到上述错误:
TypeError: ('Params must be in a list, tuple, or Row', 'HY000')
我的输入文件是一个包含以下内容的 txt 文件:
TEST ,EU ,Totals , 30, 0.61, 0.00000000,GOLD ,01/03/2019,
TEST ,EU ,SubTotals , 40, 0.63, 0.00000000,GOLD ,01/03/2019,
几个版本:
qry = """INSERT INTO newtable ([Col1], [Col2], [Col3], [Col4], [Col5], [Col6], [Col7], [Col8]) VALUES (?,?,?,?,?,?,?,?);"""
with open (inputfile, "r") as afile:
for line in afile:
params = tuple(line.split(','))
cursor.executemany(qry, params)
conn.commit()
参数值也试过了:
params = list(line.split(','))
还尝试将所有值一一插入到列表中:
params = list(line.split(","))
a = params[0]
b = params[1]
c = params[2]
d = params[3]
e = params[4]
f = params[5]
g = params[6]
h = params[7]
dbparams = [a,b,c,d,e,f,g,h]
cursor.executemany(qry,dbparams)
【问题讨论】:
-
inputfile里面有什么? -
如果在遍历文件中的行时,每次迭代只添加一行,然后尝试
.execute而不是.executemany -
我已经更新了上面的帖子,因为在没有 2 行变成 1 的情况下似乎无法在此处添加它
-
我在第一个示例中添加了 def insert_data(),现在我得到一个不同的错误 - SQL 包含 8 个参数标记,但提供了 9 个参数。当我打印 (qry,params) 时,它确实有一个额外的参数 ''\n' 我猜这是造成这种情况的原因。因此,使用 insert_data() 函数再次尝试上面的第三个示例以仅指定 8 个参数,我再次得到主题标题中的第一个错误。所以我需要以某种方式忽略它\n
-
知道了!!!当我输入我的最后一条评论时,实际上我自己回答了。所以在添加了 insert_data() 函数之后,我只是插入了前 8 个参数: cursor.execute(qry, params[0:8])