zoukankan      html  css  js  c++  java
  • python3向oracle插入数据

    python3.7连接oracle

    本文示例使用 oracle-11.2.0.4.0版本

    oracle-client准备部分

    1.下载oracle client,下载地址

    注意:

    1.保证与oracle服务器版本统一

    2.python3 ,oracle服务器,oracle client统一使用64位或者32位

    2.先解压缩instantclient-basic-linux.x64-11.2.0.4.0.zip,后解压缩instantclient-sdk-linux.x64-11.2.0.4.0.zip

    3.进入目录instantclient_11_2,创建软链接

    ln -s libclntsh.so.11.1  libclntsh.so

    4.在刚刚解压得到的instantclient_11_2文件夹下新建network/admin

    5.在刚刚创建的目录下创建network/admin创建文件tnsnames.ora,模板如下(SERVICE_NAME请填写服务器SID)

    ORCL =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
       (CONNECT_DATA =
         (SERVER = DEDICATED)
         (SERVICE_NAME = orcl)
       )
     )

    6.修改环境变量(自行更改oracle client解压的路径)

    vim /etc/profile

    export ORACLE_HOME=/usr/local/instantclient_11_2
    export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
    export NLS_LANG='AMERICAN_AMERICA.AL32UTF8'
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export PATH=$ORACLE_HOME:$PATH

    source /etc/profile

    python准备部分

    通过pip 下载库cx-Oracle

    pip install cx-Oracle

    插入数据

    #coding=utf-8
    #!/usr/bin/python3
    import pymysql
    import threading
    import time
    import cx_Oracle
    '''
    前提:在oracle中设置主键字段自增
    '''
    def try_to_connect_and_insert():
            username="test1"
            userpwd="123"
            host="127.0.0.1"
            port=1521
            dbname="orcl"
            insertCount = 0
            dsn=cx_Oracle.makedsn(host,port,dbname)
            try:
                    connection=cx_Oracle.connect(username,userpwd,dsn)
                    connection.autocommit=True
                    sql="insert into TST01(NAME,PRICE,MDATE) VALUES('TEST',1.0001,to_date('20200121','yyyymmdd'))"
                    cursor=connection.cursor()
                    for i in range(500000-insertCount):
                            insertCount=i
                            cursor.execute(sql)
                    print(insertCount)
                    cursor.close()
                    connection.close()
            except Exception as e:
                    print(e)
                    print(insertCount)
    
    
    if __name__ == '__main__':
            for i in range (10):
                    T = threading.Thread(target=try_to_connect_and_insert)
                    T.start()
                    time.sleep(1)

    运行python脚本,完

    以下为本人在运行时遇到的问题

    =======================================

    1.  DPI-1047: 64-bit Oracle Client library cannot be loaded: "libclntsh.so

    当我的python版本,oracle版本,Oracle Instant Client版本都一致的情况下,依然报这个错误。需要执行以下命令

    sh -c "echo /usr/local/instantclient_11_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"
    ldconfig
  • 相关阅读:
    SAP CRM One Order函数CRM_Object_FILL_OW的设计原理
    SAP CRM One Order函数CHANGE_OW的设计原理
    SAP CRM One Order函数SAVE_EC的设计原理
    POJ-1125 Stockbroker Grapevine
    GStreamer 1.0 series序列示例
    H265与ffmpeg改进开发
    FFmpeg扩展开发
    在Yolov5 Yolov4 Yolov3 TensorRT 实现Implementation
    TensorRT 基于Yolov3的开发
    大规模数据处理Apache Spark开发
  • 原文地址:https://www.cnblogs.com/Nora-F/p/12852606.html
Copyright © 2011-2022 走看看