如何使df.to_sql()创建varchar2对象

时间:2017-01-10 10:46:59

标签: python oracle pandas sqlalchemy

我有一个DataFrame,它由一列字符串组成。如果我df.to_sql()将其作为表保存到Oracle数据库中,则该列为CLOB类型,我需要对其进行转换。我想知道在创建表时是否可以指定类型(比如varchar2)?

2 个答案:

答案 0 :(得分:2)

您可以明确指定SQLAlchemy Type:

import cx_Oracle
from sqlalchemy import types, create_engine
engine = create_engine('oracle://user:password@host_or_scan_address:1521/ORACLE_SERVICE_NAME')

df.to_sql('table_name', engine, if_exists='replace',
          dtype={'str_column': types.VARCHAR(df.str_column.str.len().max())})

df.str_column.str.len().max() - 将计算最大字符串长度

注意:types.VARCHAR将映射到Oracle的VARCHAR2(请参阅working example here

答案 1 :(得分:1)

你必须选择,第一个是手动创建表,然后使用if_exists参数告诉pandas附加到表而不是删除并重新创建

选项二是使用dtype传递列名字典,以便可以适当地创建表。这些是SQL Alchemy类型,所以你应该

from sqlalchemy.dialects.oracle import VARCHAR2

并将其作为

传递到字典中
{'mycolumn': VARCHAR2(256) }

或合适的长度。

参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html