2015-11-04 28 views
1

當我運行下面的代碼時,我不斷收到「InterfaceError:Error綁定參數2-可能不支持的類型」錯誤,並且我需要幫助來確定問題出在哪裏。一切工作正常,直到我嘗試將數據發送到SQL通過。Python「InterfaceError:錯誤綁定參數2 - 可能不支持的類型。」

anagramsdf.to_sql('anagrams',con=conn,if_exists='replace',index=False) 
cdf=pd.read_sql("select (distinct ID) from anagrams;",conn) 

import pandas as pd 
import sqlite3 

conn = sqlite3.connect("anagrams") 
xsorted=sorted(anagrams,key=sorted) 
xunique=[x[0] for x in anagrams] 

xunique=pd.Series(xunique) 
xanagrams=pd.Series(anagrams) 
anagramsdf=pd.concat([xunique,dfcount,xanagrams],axis=1) 
anagramsdf.columns=['ID','anagram_count','anagram_list'] 

c=conn.cursor() 
c.execute("create table anagrams(ID, anagram_count, anagram_list)") 
conn.commit() 

anagramsdf.to_sql('anagrams',con=conn,if_exists='replace',index=False) 
cdf=pd.read_sql("select (distinct ID) from anagrams;",conn) 

cdf=pd.read_sql("select max(anagram_count) from anagrams;",conn) 
cdf 
def print_full(x): 
    pd.set_option('display.max_rows', len(x)) 
    print(x) 
    pd.reset_option('display.max_rows') 

cdf=pd.read_sql("select * from anagrams where anagram_count=12;",conn) 
pd.set_option('max_colwidth',200) 

完全追蹤誤差:

Traceback (most recent call last): 
    File "sqlpandas.py", line 88, in <module> 
    anagramsdf.to_sql('anagrams',con=conn,if_exists='replace',index=False) 
    File "/Users/andrewclark/anaconda/lib/python2.7/site-packages/pandas/core/generic.py", line 982, in to_sql 
    dtype=dtype) 
    File "/Users/andrewclark/anaconda/lib/python2.7/site-packages/pandas/io/sql.py", line 549, in to_sql 
    chunksize=chunksize, dtype=dtype) 
    File "/Users/andrewclark/anaconda/lib/python2.7/site-packages/pandas/io/sql.py", line 1567, in to_sql 
    table.insert(chunksize) 
    File "/Users/andrewclark/anaconda/lib/python2.7/site-packages/pandas/io/sql.py", line 728, in insert 
    self._execute_insert(conn, keys, chunk_iter) 
    File "/Users/andrewclark/anaconda/lib/python2.7/site-packages/pandas/io/sql.py", line 1357, in _execute_insert 
    conn.executemany(self.insert_statement(), data_list) 
sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type. 

段從數據幀:

   ID anagram_count   anagram_list 
0   aa    1     (aa,) 
1  anabaena    1   (anabaena,) 
2  baaskaap    1   (baaskaap,) 
3  caracara    1   (caracara,) 
4  caragana    1   (caragana,) 
+0

您可以將示例縮減爲幾行嗎?所有帶'urllib','itertools','print'語句等的代碼都不會添加任何有用的東西。請參閱[如何創建最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve) –

+0

另外,根據提出錯誤的哪一行,這可能是[tag:pandas] ,並且該問題需要適當的標記。 –

+0

請添加完整的錯誤追溯! –

回答

1

我用下面的代碼來改變數據類型爲字符串,這個解決問題:

anagramsdf.dtypes 
anagramsdf['ID']= anagramsdf['ID'].astype('str') 
anagramsdf['anagram_list']= anagramsdf['anagram_list'].astype('str') 
anagramsdf.to_sql('anagramsdf',con=conn,if_exists='append',index=False) 
+1

'anagram_list'列包含元組,sqlite不支持插入數據框。因此將其轉換爲字符串可解決問題。 – joris

+0

謝謝你的解釋joris! – Andrew

相關問題