码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    上述代码前置条件:

    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    上述代码表可以自动实现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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    速看!!带你揭秘3D建模行业内幕!!
    理解并掌握C#的Channel:从使用案例到源码解读(一)
    【21天算法挑战赛】排序算法——冒泡排序
    SpringCloud链路追踪——Spring Cloud Sleuth 和 Zipkin 介绍 & Windows 下使用初步
    netty系列之:netty中常用的字符串编码解码器
    java集合源码学习(七)ArrayList
    【聊天系统的优化】RPC方式的优化
    学习阶段性总结
    【Linux】静态库的制作和使用详解
    高通cDSP简单编程例子(实现查询高通cDSP使用率、签名),RK3588 npu使用率查询
  • 原文地址:https://blog.csdn.net/zou_gr/article/details/125911136
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号