亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

python cx_Oracle基礎(chǔ)使用方法

dack / 622人閱讀

摘要:使用的方法需要對格式進(jìn)行控制,通過流獲取這幾個(gè)字段值不簡潔個(gè)人觀點(diǎn)。優(yōu)點(diǎn)是能夠使用的方法直接訪問文件,不需要考慮打開關(guān)閉連接,并且通過流向文件中寫入還挺好用的。要進(jìn)行多個(gè)查詢,個(gè)人建議使用完后將結(jié)果保留再關(guān)閉,多次查詢重復(fù)該操作。

問題

使用python操作oracle數(shù)據(jù)庫,獲取表的某幾個(gè)字段作為變量值使用。

使用Popen+sqlplus的方法需要對格式進(jìn)行控制,通過流獲取這幾個(gè)字段值不簡潔(個(gè)人觀點(diǎn)……)。(優(yōu)點(diǎn)是能夠使用sqlplus的方法直接訪問sql文件,不需要考慮打開/關(guān)閉連接,并且通過流向文件中寫入還挺好用的。不過優(yōu)點(diǎn)不是這次所關(guān)注的)

使用cx-Oracle將查詢結(jié)果返回為tuple格式,對返回結(jié)果的操作簡潔,滿足需求。(要注意數(shù)據(jù)庫連接創(chuàng)建與關(guān)閉、sql的編寫、預(yù)處理與提交等等,看起來也不簡潔(同樣個(gè)人觀點(diǎn)……))

基礎(chǔ)方法 數(shù)據(jù)庫連接

1、使用tns串連接

oracle_tns = cx_Oracle.makedsn("XXX.XXX.XXX.XXX", 1521,"oracleName")
connectObj = cx_Oracle.connect("oracleUserName", "password", oracle_tns)

2、其他簡潔方式

db = cx_Oracle.connect("hr", "hrpwd", "localhost:1521/XE")
db1 = cx_Oracle.connect("hr/hrpwd@localhost:1521/XE")

數(shù)據(jù)庫斷開連接
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é)果可能會存在異常。要進(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語句的語法與數(shù)據(jù)庫有關(guān),不想使用綁定變量,可以拼接sql字符串 (′???`)

簡單工具
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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44470.html

相關(guān)文章

  • Python連接Oracle

    摘要:連接當(dāng)前環(huán)境下載安裝包由于我本地版本是所以選擇是版本參考安裝包列表安裝安裝查看當(dāng)前引入模塊庫的路徑檢查安裝路徑,如果文件不在以上引入路徑內(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:...

    JasonZhang 評論0 收藏0
  • Build and Install cx_Oracle on Mac Leopard Intel

    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 ...

    DTeam 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<