2015-02-24 124 views
1

錯誤使用熊貓的時候寫SQL到Oracle:類型錯誤:期待字符串,Unicode或緩衝區對象,同時試圖使用:錯誤編寫SQL到Oracle:類型錯誤:期待字符串,Unicode或緩衝區對象

熊貓v 0.15.2

SQLAlchemy的v 0.9.8

merged.to_sql('name_of_table', ora, schema='schema', if_exists='append', index=False) 

這裏是我的引擎創建字符串:

ora = create_engine('oracle://name:[email protected]:1521/instance') 

我曾在here on the site之前發過一個問題,但是在Joris的幫助下修復了這個問題。之後,它被糾正了一次,然後開始提示上面的錯誤。

我試過this issueand this one,但無濟於事。

以下是完整的錯誤:夠

merged.to_sql('name_of_table', ora, schema='schema', if_exists='append', index=False)Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/pandas/core/generic.py", line 966, in to_sql 
dtype=dtype) 
File "/usr/local/lib/python2.7/dist-packages/pandas/io/sql.py", line 538, in to_sql 
chunksize=chunksize, dtype=dtype) 
File "/usr/local/lib/python2.7/dist-packages/pandas/io/sql.py", line 1172, in to_sql 
table.insert(chunksize) 
File "/usr/local/lib/python2.7/dist-packages/pandas/io/sql.py", line 717, in insert 
self._execute_insert(conn, keys, chunk_iter) 
File "/usr/local/lib/python2.7/dist-packages/pandas/io/sql.py", line 692, in _execute_insert 
conn.execute(self.insert_statement(), data) 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 729, in execute 
return meth(self, multiparams, params) 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 322, in _execute_on_connection 
return connection._execute_clauseelement(self, multiparams, params) 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 826, in _execute_clauseelement 
compiled_sql, distilled_params 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 958, in _execute_context 
context) 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1162, in _handle_dbapi_exception 
util.reraise(*exc_info) 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 928, in _execute_context 
context) 
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/dialects/oracle/cx_oracle.py", line 941, in do_executemany 
cursor.executemany(statement, parameters) 
TypeError: expecting string, unicode or buffer object 

好笑的是,如果我把它寫在一個csv,然後讀取CSV回到一個新的數據幀,就開始寫爲Oracle。

例子:

merged.to_csv('name.csv', sep=',', index=False, dtype=object) 
merged1 = pd.read_csv('name.csv', dtype=object) 

然後,它會進一步得到,而是一個新的錯誤彈出: sqlalchemy.exc.DatabaseError:(DatabaseError)ORA-00932:不一致的數據類型:預期數量得到CLOB

任何幫助表示讚賞。謝謝!

+0

您能顯示merged.info()和merged1.info()的輸出嗎?此外,你有NaN值嗎?如果您只嘗試附加數據框的第一行('merged.head()。to_sql(...)'),您是否也遇到同樣的問題?您也可以嘗試將'echo = True'傳遞給'create_engine'以獲得更詳細的輸出。 – joris 2015-02-25 13:10:04

+0

@Joris,抱歉在這方面的長期拖延,但我明白了。我會在第二個帖子中回答我自己的問題。 – 2015-02-26 18:41:08

+0

當然發佈你自己的答案,我對解決方案感興趣! – joris 2015-02-27 08:45:21

回答

1

回答我自己的問題,即使有點晚。這涉及數據庫和數據框之間的dtype問題。將數據框解析爲與表格類似的dtypes,以允許其成功寫入。

再次感謝@Joris

相關問題