Error when using Pandas to write SQL to Oracle: TypeError: expecting string, unicode or buffer object
Error when using Pandas to write SQL to Oracle: TypeError: expecting string, unicode or buffer object
使用 Pandas 将 SQL 写入 Oracle 时出错:类型错误:尝试使用时需要字符串、unicode 或缓冲区对象:
Pandas v 0.15.2
SqlAlchemy 0.9.8 版
merged.to_sql('name_of_table', ora, schema='schema', if_exists='append', index=False)
这是我的引擎创建字符串:
ora = create_engine('oracle://name:pass@site.domain.com:1521/instance')
我在 之前遇到过一个问题,但在 Joris 的帮助下已解决。改正后它工作了一次,然后开始提示上面的错误。
我试过this issue, and 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: 数据类型不一致: 预期 NUMBER 得到 CLOB
感谢任何帮助。谢谢!
回答我自己的问题,虽然有点晚了。这围绕着数据库和数据框之间的 dtype 问题展开。将数据帧解析为与 table 相似的 dtype 使其能够成功写入。
再次感谢@Joris
使用 Pandas 将 SQL 写入 Oracle 时出错:类型错误:尝试使用时需要字符串、unicode 或缓冲区对象:
Pandas v 0.15.2
SqlAlchemy 0.9.8 版
merged.to_sql('name_of_table', ora, schema='schema', if_exists='append', index=False)
这是我的引擎创建字符串:
ora = create_engine('oracle://name:pass@site.domain.com:1521/instance')
我在
我试过this issue, and 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: 数据类型不一致: 预期 NUMBER 得到 CLOB
感谢任何帮助。谢谢!
回答我自己的问题,虽然有点晚了。这围绕着数据库和数据框之间的 dtype 问题展开。将数据帧解析为与 table 相似的 dtype 使其能够成功写入。
再次感谢@Joris