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

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值