摘要:使用的方法需要對(duì)格式進(jìn)行控制,通過(guò)流獲取這幾個(gè)字段值不簡(jiǎn)潔個(gè)人觀點(diǎn)。優(yōu)點(diǎn)是能夠使用的方法直接訪問(wèn)文件,不需要考慮打開(kāi)關(guān)閉連接,并且通過(guò)流向文件中寫入還挺好用的。要進(jìn)行多個(gè)查詢,個(gè)人建議使用完后將結(jié)果保留再關(guān)閉,多次查詢重復(fù)該操作。
問(wèn)題
使用python操作oracle數(shù)據(jù)庫(kù),獲取表的某幾個(gè)字段作為變量值使用。
使用Popen+sqlplus的方法需要對(duì)格式進(jìn)行控制,通過(guò)流獲取這幾個(gè)字段值不簡(jiǎn)潔(個(gè)人觀點(diǎn)……)。(優(yōu)點(diǎn)是能夠使用sqlplus的方法直接訪問(wèn)sql文件,不需要考慮打開(kāi)/關(guān)閉連接,并且通過(guò)流向文件中寫入還挺好用的。不過(guò)優(yōu)點(diǎn)不是這次所關(guān)注的)
使用cx-Oracle將查詢結(jié)果返回為tuple格式,對(duì)返回結(jié)果的操作簡(jiǎn)潔,滿足需求。(要注意數(shù)據(jù)庫(kù)連接創(chuàng)建與關(guān)閉、sql的編寫、預(yù)處理與提交等等,看起來(lái)也不簡(jiǎn)潔(同樣個(gè)人觀點(diǎn)……))
基礎(chǔ)方法 數(shù)據(jù)庫(kù)連接1、使用tns串連接
oracle_tns = cx_Oracle.makedsn("XXX.XXX.XXX.XXX", 1521,"oracleName") connectObj = cx_Oracle.connect("oracleUserName", "password", oracle_tns)
2、其他簡(jiǎn)潔方式
數(shù)據(jù)庫(kù)斷開(kāi)連接db = cx_Oracle.connect("hr", "hrpwd", "localhost:1521/XE")
db1 = cx_Oracle.connect("hr/hrpwd@localhost:1521/XE")
connectObj.close()建立游標(biāo)
cursorObj = connectObj.cursor()關(guān)閉游標(biāo)
cursorObj.close()增
1、單條插入:
sql = "INSERT INTO T_AUTOMONITOR_TMP(point_id) VALUES(:pointId)" cursorObj.prepare(sql) rown = cursorObj.execute(None, {"pointId" : pointId}) connectObj.commit()
2、多條插入:
sql = "INSERT INTO T_AUTOMONITOR_TMP(point_id) VALUES(:pointId)" cursorObj.prepare(sql) rown = cursorObj.executemany(None, recordList) connectObj.commit()刪
sql = "DELETE FROM T_AUTOMONITOR_TMP t WHERE t.point_id = :pointId " cursorObj.prepare(sql) rown = cursorObj.execute(None, {"pointId" : pointId}) connectObj.commit()改
sql = "UPDATE t_automonitor_other t SET t.active = "2" WHERE t.active = "1" AND t.point_id = :pointId " cursorObj.prepare(sql) cursorObj.execute(None, {"pointId" : pointId}) connectObj.commit()查
sql = "SELECT t.describ FROM t_automonitor_tmp t WHERE t.point_id = :pointId" cursorObj.prepare(sql) cursorObj.execute(None, {"pointId" : pointId})Tips
增、刪、改操作都需要當(dāng)前連接進(jìn)行commit()
若使用一個(gè)游標(biāo)cursor進(jìn)行N次查詢,注意若再使用前N-1次查詢結(jié)果可能會(huì)存在異常。要進(jìn)行多個(gè)查詢,個(gè)人建議使用完cursor后將結(jié)果保留再關(guān)閉cursor,多次查詢重復(fù)該操作。
如果不使用prepare,可以直接使用execute,以下查詢等價(jià):
r1 = cursor.execute("SELECT * FROM locations WHERE country_id=:1 AND city=:2", ("US", "Seattle"))
r2 = cursor.execute("SELECT * FROM locations WHERE country_id=:9 AND city=:4", ("US", "Seattle"))
r3 = cursor.execute("SELECT * FROM locations WHERE country_id=:m AND city=:0", ("US", "Seattle"))
sql語(yǔ)句的語(yǔ)法與數(shù)據(jù)庫(kù)有關(guān),不想使用綁定變量,可以拼接sql字符串 (′???`)
簡(jiǎn)單工具class baseUtilsX(): """baseUtils""" def __init__(self): self.connectObj = "" self.connCnt = 0 self.cursorCnt = 0 def initOracleConnect(self): oracle_tns = cx_Oracle.makedsn("XXX.XXX.XXX.XXX", 1521,"XX") if self.connCnt == 0: self.connectObj = cx_Oracle.connect("oracleUserName", "password", oracle_tns) self.connCnt += 1 def getOracleConnect(self): self.initOracleConnect() return self.connectObj def closeOracleConnect(self, connectObj): connectObj.close() self.connCnt -= 1 def getOracleCursor(self): self.initOracleConnect() self.cursorCnt += 1 return self.connectObj.cursor() def closeOracleCursor(self, cursorObj): cursorObj.close() self.cursorCnt -= 1 if self.cursorCnt == 0: print "will close conn" self.closeOracleConnect(self.connectObj) def selectFromDbTable(self, sql, argsDict): # 將查詢結(jié)果由tuple轉(zhuǎn)為list queryAnsList = [] selectCursor = self.getOracleCursor() selectCursor.prepare(sql) queryAns = selectCursor.execute(None, argsDict) for ansItem in queryAns: queryAnsList.append(list(ansItem)) self.closeOracleCursor(selectCursor) return queryAnsList參考文章
精通 Oracle+Python,第 1 部分:查詢最佳應(yīng)踐
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44470.html
摘要:連接當(dāng)前環(huán)境下載安裝包由于我本地版本是所以選擇是版本參考安裝包列表安裝安裝查看當(dāng)前引入模塊庫(kù)的路徑檢查安裝路徑,如果文件不在以上引入路徑內(nèi)需要將該文件拷貝到以上引入路徑所以我這里不需要進(jìn)行拷貝操作 Python連接Oracle 當(dāng)前環(huán)境:Linux Centos 7 1. 下載安裝包c(diǎn)x_Oracle 由于我本地Python版本是2.7,所以選擇是2.7版本 wget https:...
http://www.cs.utexas.edu/~mitra/csSpring2011/cs327/cx_mac.html Build and Install cx_Oracle on Mac Leopard Intel I finally succeeded in building and installing cx_Oracle on a Mac. I will outline the ...
閱讀 2411·2021-10-09 09:44
閱讀 2142·2021-10-08 10:05
閱讀 3435·2021-07-26 23:38
閱讀 3013·2019-08-28 18:16
閱讀 825·2019-08-26 11:55
閱讀 1830·2019-08-23 18:29
閱讀 2045·2019-08-23 18:05
閱讀 1374·2019-08-23 17:02