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基础使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git安装 perl ubuntu_ub
- 下一篇: 计算机辅助设计的发展及应用,计算机辅助设