liu*_*u66 4 python tuples list sql-server-2008 pymssql
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)
Run Code Online (Sandbox Code Playgroud)
我使用python3.3和pymssql。我想将数据从python导入到MSSQL。grpidx_data的类型是list(tuple),像[(12,1),(34,2),...],我运行上面的代码然后得到了错误:
ValueError:应为简单类型,元组或列表
如果我只使用list(tuple)类型的数据,则代码可以正常工作。但是,当我使用for循环获取数据时,即使其类型也为list(tuple),它也不起作用。
那么如何解决这个问题呢?
谢谢!
我遇到了同样的问题,实际上有一个运行的脚本,一个没有运行的脚本。最终,我发现一个有效的字符串全是字符串,另一个有效数字。进一步挖掘,我发现错误类型是numpy.int64 numpy用于整数类型。看起来您正在使用熊猫,其中也包含那些数字类型。我将其强制为字符串,再次运行代码,一切正常。
我编写了一个特殊的清理功能,以在运行元组之前将其清除:
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)
Run Code Online (Sandbox Code Playgroud)
然后我运行我的代码,几乎完全像上面的代码一样:
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()
Run Code Online (Sandbox Code Playgroud)
没问题。
同样要确保,dropna()因为这也是一个奇怪的类型。
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |