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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM