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