grpidx_data=[]
for i in range(0,len(data1)):
grpidx_data.append((data1.loc[i,'price'],data1.loc[i,'id']))
cur.executemany("insert into grpidx values (%s,%s)",grpidx_data)
我使用python3.3和pymssql。我想将数据从 python 导入到 MSSQL。 grpidx_data 的类型是列表(元组),像[(12,1),(34,2),...],我运行上面的代码然后得到错误:
ValueError:需要一个简单类型、元组或列表
如果我只使用类型为列表(元组),代码运行良好。但是当我使用 for 循环获取数据时,甚至它的类型也列表(元组),它不工作。
那么如何解决这个问题呢?
Thanks!
我遇到了同样的问题,实际上有一个脚本运行了,另一个脚本没有运行。我最终发现,有效的一个是字符串,另一个是数字。进一步挖掘,我发现不好的类型是numpy.int64numpy 用于整数的类型。看起来您正在使用 pandas,它也有这些数字类型。我将其强制为字符串,再次运行代码,一切正常。
我编写了一个特殊的清理函数来在运行之前清理元组:
def tupleGetter(x):
for i in range(len(x)):
if str(type(x[i])) == "<class 'numpy.int64'>":
x[i] = str(x[i])
return tuple(x)
然后我运行我的代码,几乎与上面的代码完全相同:
myValues = (tupleGetter(df.ix[i]) for i in range(len(df)))
cursor.executemany("""INSERT INTO dbo.MyTable([A],[B],[C],[C],[D],[E],[F])
VALUES (%s, %s, %s, %s, %s, %s)""",
myValues
)
conn.commit()
跑没问题。
务必dropna()
因为这也是一种奇怪的类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)