python與oracle
本文實例講述了python連接oracle資料庫的方法,分享給大家供大家參考。具體步驟如下:
一、首先下載驅動:(cx_Oracle)
http://www.python.net/crew/atuining/cx_Oracle/
不過要注意一下版本,根據你的情況加以選擇。
二、安裝:
首先配置oracle_home環境變數
執行那個exe安裝程序就可以了,它會一個cx_Oracle.pyd到Libsite-packages目錄下。
如果是linux,執行
python setup.py build
python setup.py install
三、執行一段測試程序:
import cx_Oracle
con = cx_Oracle.connect( "xjtu_test", "37343734","xjtu.world")
cursor = con.cursor()
cursor.close()
con.close()
里邊connect中的3個參數從左到右分別是:user, pass, TNS。
那個TNS可以用Oracle客戶端工具中的Net Configuration Assistant來配置。
四、具體的cx_Oracle API可以參考:
http://www.python.net/crew/atuining/cx_Oracle/html/cx_Oracle.html
五、示例:
>>> import cx_Oracle
>>> conn=cx_Oracle.connect ('scott/tiger@oratest')
>>> curs=conn.cursor ()
>>> sql='select * from emp'
>>> rr=curs.execute (sql)
>>> row=curs.fetchone()
>>> row
(7369, 'SMITH', 'CLERK', 7902, datetime.datetime(1980, 12, 17, 0, 0), 800.0, None, 20)
>>> while row:
(ID,NAME)=(row[0],row[1])
row=curs.fetchone ()
print ID,NAME
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
7900 JAMES
7902 日常
7934 MILLER
如果使用windows平台,執行那段測試代碼時你肯定遇到問題了,一般會有以下問題:
① import cx_Oracle 時報告找不到OCI.DLL:
到裝了Oracle的機器上找一個,然後到Libsite-packages目錄下就可以了。
② cx_Oracle.connect 時報告RuntimeError: Unable to acquire Oracle environment handle:
這個比較麻煩,按以下步驟來解決:(可能不需要所有的步驟,我沒有確認,不過把以下步驟都執行了,確實問題就解決了)
首先,確認你是在控制台下邊來執行這個python腳本的。而不是某些ide,例如:PyDev(它們似乎無法載入os的環境變數)。
其實,在本機安裝Oracle(只安客戶端工具就可以了)。
最後,添加以下環境變數:(我給出我的,換成你自己的路徑就可以了)
ORACLE_HOME=D:OracleOra81
PATH=D:OracleOra81bin;
希望本文所述對大家的Python程序設計有所幫助。
② python自定義輸入用戶名和密碼如何寫到oracl資料庫中
有很多小夥伴可能知道python不知道怎麼讓用戶名和密碼寫到oracle數據中。接下來就讓小編給大家解釋說明一下操作方法
1.保證與oracle伺服器版本統一。這是想要數據傳送的首要必要的條件。
2.然後我們再找到python3 ,oracle伺服器,oracle client統一使用64位或者32位。這里小編推薦大家使用64位以上的系統,因為64位以上的系統操作簡單,比較穩定。
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.so4.在剛剛解壓得到的instantclient_11_2文件夾下新建network/admin
5.在剛剛創建的目錄下創建network/admin創建文件tnsnames.ora,最後按照以下的模板進行調整就能得到一個完整的程序。模板如下(SERVICE_NAME請填寫伺服器SID)以上就是 Python寫入到oracl資料庫中的幾個步驟,如果說對你有幫助,那麼就點贊轉發吧!
③ 如何用python更新oracle資料庫
用python更新oracle資料庫:
1. 要想使Python可以操作Oracle資料庫,首先需要安裝cx_Oracle包,可以通過下面的地址來獲取安裝包:cx-oracle.sourceforge.net/
2. 另外還需要oracle的一些類庫,此時需要在運行python的機器上安裝Oracle Instant Client軟體包,可以通過下面地址獲得technetwork/database/features/instant-client/index-097480.html
找到符合自己平台的包,然後安裝,這里我使用的是rpm包,所以使用以下命令安裝
$ sudo rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm
裝完畢後還需要設置一下環境變數,如下
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/oracle/11.2/client/lib
然後寫update語句對表進行更新:
import cx_Oracle //導入鏈接oracle的庫
conn = cx_Oracle.connect('fkong/[email protected]/orcl') //建立與orcl的連接
cursor = conn.cursor () //打開游標
cursor.execute ("update test set COL1='u' where ID=1") //執行更新
conn.commit() //提交結果
cursor.close (); //關閉游標
conn.close ();//關閉連接
④ python連接oracle資料庫報出 ORA-12541: TNS: 無監聽程序
方法一:
在oracle_home下找到lsnrctl.exe 輸入 start
方法二
可能認不到實例名
在cmd下運行
set oracle_sid=自己資料庫的實例名(大多數orcl)
網上還有很多解決辦法
也許不見得管用,這種問題具體問題具體分析比較好。介紹的這2種您的機器還不行。就去修改一個TNSNAMES.ORA。
⑤ python3連接oracle報錯
python3連接oracle報錯
# -*- coding:utf-8 -*-
#!/usr/bin/env python
'''
Created on 2014年8月4日
@author: 188007
連接Oracle資料庫的class
'''
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
import cx_Oracle
import sys
class Oracle:
'''
python access oracle helper tool class
'''
def __init__(self, ip,port,db,user,pwd):
self.ip = ip
self.port = port
self.db = db
self.user = user
self.pwd = pwd
def __GetConnect(self):
""" 得到連接信息 返回: conn.cursor() """
if not self.db:
raise(NameError,"沒有設置資料庫信息")
dsn=cx_Oracle.makedsn(self.ip,self.port,self.db)
self.conn=cx_Oracle.connect(self.user,self.pwd,dsn)
cur = self.conn.cursor()
if not cur:
raise(NameError,"連接資料庫失敗")
else:
return cur
def ExecQuery(self,sql):
""" 執行查詢語句 返回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的欄位
調用示例:
oracle = Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
resList = oracle.ExecQuery("SELECT OBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARK FROM GFDMS.THZONE ORDER BY NUMCODE")
for (AREANAME) in resList:
print str(AREANAME).decode('gb2312')
"""
try:
cur = self.__GetConnect()
cur.execute(sql)
resList = cur.fetchall()
#查詢完畢後必須關閉連接
self.conn.close()
except Exception, err:
sys.exit(1)
return resList
def ExecNonQuery(self,sql):
""" 執行非查詢語句
調用示例:
oracle.ExecNonQuery("insert into THZONE values('x','y')")
"""
try:
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
except Exception, err:
sys.exit(1)
# def main():
# # oracle = Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
# # #返回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的欄位
# # oracle.ExecNonQuery("insert into THZONE values('x','y')")
# oracle = Oracle('10.27.95.253','1561','GTEST','GTAPPS','GTAPPS')
# resList = oracle.ExecQuery("SELECT OBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARK FROM GTEST.THZONE ORDER BY NUMCODE")
# for (AREANAME) in resList:
# print str(AREANAME).decode('utf-8')
#
# if __name__ == '__main__':
# main()
⑥ oracle怎麼調用python代碼
1、把python程序放到一個bat文件裡面:python.bat [內容:start python clearlog.py]
2、在oracle裡面創建JOB scheler
3、在JOB scheler 裡面 調用 xxxx.bat文件
即可。
⑦ python 3.6 cx_Oracle.DatabaseError: DPI-1050
很明顯,這里cx_Oracle依賴本機oracle客戶端啟動,原因是本機安裝的客戶端版本太低,查看PATH環境變數是否加入oracle客戶端路徑,沒有的話可以在PATH前面手動添加一個更高版本的客戶端,比如安裝一個NavicatforOracle,,把文件夾下的instantclient_12_1目錄路徑加到PATH環境變數中,注意:是裡麵包含oci.dll,oraocci12.dll,oraociei12.dll的目錄。
⑧ python連oracle: DPI-1047錯誤
python連接oracle的時候報錯
DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: 「The specified mole could not be found」. See https://oracle.github.io/odpi/doc/installation.html#windows for help
解決方案
要求
①pycharm是64位
②oracle客戶端是64位
③python是64位
接下來的操作,去oracle客戶端安裝目錄找到三個文件,分別是
oci.dll、oraocci11.dll、oraociei11.dll
然後把這些文件復制到python的渣山安裝目錄site-packages下,重啟工具就可以擾卜了如李中