pandas的dataframe批量保存到Oracle数据库

目标将dataframe批量写入到Oracle数据库

writed_data = np.array(test_data)  # dataframe转换array
writed_data = writed_data.tolist() # array转换list
sql = 'insert into RESULT_TABLE(c1,c2,c3,c4,c5) values(:1,:2,:3,:4,:5)'
cur = conn.cursor()
cur.executemany(sql, writed_data)  # 批量执行query_sql
# 记得需要commit然后关闭
cur.close()   
conn.commit()
conn.close()

上述代码前置条件:

  • test_data为dataframe。
  • RESULT_TABLE是数据库中的空表,需要和写入的dataframe的字段名和格式一致。
  • conn是Oracle数据库的连接
  • c1,c2,c3,c4,c5是dataframe的列名。

结果

可以成功批量写入到指定的表。

进一步优化

因为当dataframe的列名变多之后,重复性的工作增加,所以从这个方面进行优化。

def py_insert_oracle(columns,save_table_name):
    """

    Args:
        columns: 以列表的形式
        save_table_name: 保存table的名字

    Returns:直接的insert到Oracle的sql语句,字符串格式

    """
    s = ''
    for i in range(len(columns)):
        s = s + columns[i] + '-'
    sql_columns = s.replace('-',',')[:-1] # 不要最后输出的逗号
    sql_number_str = ''
    for i in range(1,len(columns)+1,1):
        sql_number_str = sql_number_str + ':' + str(i) + ','   #   ':1,:2,:3,:4,:5,:6'
    sql_number_str = sql_number_str[:-1]
    query_sql = 'insert into ' + save_table_name + '(' + sql_columns + ') values(' + sql_number_str + ') '
    return query_sql

上述代码表可以自动实现sql的自动化生成,原理也就是简单的字符串拼接替换,大家想要了解更详细的化,把函数拆开,多打印点出来就可以了。
直接调用的话可以参考下面的参数输入。

columns = test_data.columns.tolist()        # 获得dataframe的列名
query_sql = py_insert_oracle(columns, save_table_name = 'RESULT_TABLE')
# ---------------------------------
# 写入oracle,执行query_sql并关闭
# ---------------------------------
writed_data = np.array(test_data)
writed_data = writed_data.tolist()

cur = conn.cursor()
cur.executemany(query_sql, writed_data)  # 批量执行query_sql

cur.close()
conn.commit()
conn.close()
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值