Python 直接把DataFrame写入OACLE数据库

Python 直接把DataFrame写入OACLE数据库
python 把模型跑出来的结果写入csv,txt等文档中,不便于后续的存储和分析,于是乎我想把它直接写入数据库,但是问题来了,百度了很多写法,都是需要把DataFrame的每一行逐条插入,虽然逻辑清晰明了,但是也有很多弊端,需要提前在数据库创建和这个DataFrame字段相同的表,我就在想如何把DataFrame整体直接‘塞’入数据库中。通过一番摸索,终于解决了问题。现在把代码呈上来,以便后续再查阅,哈哈,如果有幸帮别人也解决掉这个烦恼,那我更开心喽,哈哈哈。
代码如下:
#定义函数,自动输出DataFrme数据写入oracle的数类型字典表,配合to_sql方法使用(注意,其类型只能是SQLAlchemy type )

from sqlalchemy.dialects.oracle import \
            BFILE, BLOB, CHAR, CLOB, DATE, \
            DOUBLE_PRECISION, FLOAT, INTERVAL, LONG, NCLOB, \
            NUMBER, NVARCHAR, NVARCHAR2, RAW, TIMESTAMP, VARCHAR, \
            VARCHAR2
def mapping_df_types(df):
		    dtypedict = {}
		    for i, j in zip(df.columns, df.dtypes):
		        if "object" in str(j):
		            dtypedict.update({i: VARCHAR(256)})
		        if "float" in str(j):
		            dtypedict.update({i: NUMBER(19,8)})
		        if "int" in str(j):
		            dtypedict.update({i: VARCHAR(19)})
		    return dtypedict

def put_df_toOracle(df_data , tableName , addres):
		    from sqlalchemy import types, create_engine
		    engine = create_engine(addres,encoding='utf-8', echo=True)
		    from sqlalchemy.dialects.oracle import \
		            BFILE, BLOB, CHAR, CLOB, DATE, \
		            DOUBLE_PRECISION, FLOAT, INTERVAL, LONG, NCLOB, \
		            NUMBER, NVARCHAR, NVARCHAR2, RAW, TIMESTAMP, VARCHAR, \
		            VARCHAR2
		    dtypedict = mapping_df_types(df_data)
           df_data.to_sql(tableName,engine,index=False,if_exists='append',\
           dtype=dtypedict,chunksize=None)
#------------------------------
    
if __name__ == '__main__':
	     df_data = 你想写入的那个DataFrame
	     tableName = '你想写入的库表'
	     addres = "oracle://用户名:密码@ip地址/实例名"
	     put_df_toOracle(df_data , tableName , addres)

参考博客
[1]: https://blog.csdn.net/walking_visitor/article/details/84023393

你可能感兴趣的:(work)