日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中ans的用法_python cx_Oracle基础使用方法

發布時間:2025/3/12 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中ans的用法_python cx_Oracle基础使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題

使用python操作oracle數據庫,獲取表的某幾個字段作為變量值使用。

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

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

基礎方法

數據庫連接

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')

數據庫斷開連接

connectObj.close()

建立游標

cursorObj = connectObj.cursor()

關閉游標

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

增、刪、改操作都需要當前連接進行commit()

若使用一個游標cursor進行N次查詢,注意若再使用前N-1次查詢結果可能會存在異常。要進行多個查詢,個人建議使用完cursor后將結果保留再關閉cursor,多次查詢重復該操作。

如果不使用prepare,可以直接使用execute,以下查詢等價:

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語句的語法與數據庫有關,不想使用綁定變量,可以拼接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):

# 將查詢結果由tuple轉為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

參考文章

總結

以上是生活随笔為你收集整理的python中ans的用法_python cx_Oracle基础使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。