pymssql:executemany值错误-预期为简单类型,元组或列表

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),它也不起作用。

那么如何解决这个问题呢?

谢谢!

bil*_*anH 5

我遇到了同样的问题,实际上有一个运行的脚本,一个没有运行的脚本。最终,我发现一个有效的字符串全是字符串,另一个有效数字。进一步挖掘,我发现错误类型是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()因为这也是一个奇怪的类型。