python3向oracle插入数据

Posted 石墨方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于python3向oracle插入数据的主要内容,如果未能解决你的问题,请参考以下文章

如何向一个oracle表中快速插入很多条数据

如何使用java代码向oracle数据库一次性插入多条数据

从片段向数据库中插入值时ListView不更新

c#通过for循环多次向数据库中插入数据。

C# 无法向Oracle数据库插入数据

JDBC向oracle插入数据