最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python cx_Oracle的基礎(chǔ)使用方法(連接和增刪改查)

 更新時間:2017年11月19日 16:44:30   作者:莫顯輝  
這篇文章主要給大家介紹了關(guān)于python cx_Oracle的基礎(chǔ)使用方法,其中包括連接、增刪改查等基本操作,并給大家分享了python 連接Oracle 亂碼問題的解決方法,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

問題

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

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

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

基礎(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)前連接進行commit()
  • 若使用一個游標(biāo)cursor進行N次查詢,注意若再使用前N-1次查詢結(jié)果可能會存在異常。要進行多個查詢,個人建議使用完cursor后將結(jié)果保留再關(guān)閉cursor,多次查詢重復(fù)該操作。
  • 如果不使用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語句的語法與數(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

python 連接 Oracle 亂碼問題(cx_Oracle)

用python連接Oracle是總是亂碼,最后發(fā)現(xiàn)時oracle客戶端的字符編碼設(shè)置不對。

編寫的python腳本中需要加入如下幾句:

import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

這樣可以保證select出來的中文顯示沒有問題。

要能夠正常的insert和update中文,還需要指定python源文件的字符集密碼和oracle一致。

# -*- coding: utf-8 -*-

例子:

# -*- coding: utf-8 -*-

import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' #或者os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'

 

import cx_Oracle
db = cx_Oracle.connect(username/passwd@host:port/sevicename)
cursor = db.cursor()
#其他操作

db.commit()
db.close()

參考:

客戶端的NLS_LANG設(shè)置及編碼轉(zhuǎn)換

      ①在Oracle客戶端向服務(wù)器端提交SQL語句時,Oracle客戶端根據(jù)NLS_LANG和數(shù)據(jù)庫字符集,對從應(yīng)用程序接傳送過來的字符串編碼進行轉(zhuǎn)換處理。如果NLS_LANG與數(shù)據(jù)庫字符集相同,不作轉(zhuǎn)換,否則要轉(zhuǎn)換成數(shù)據(jù)庫字符集并傳送到服務(wù)器。服務(wù)器在接收到字符串編碼之后,對于普通的CHAR或VARCHAR2類型,直接存儲;對于NCHAR或NVARCHAR2類型,服務(wù)器端將其轉(zhuǎn)換為國家字符集再存儲。

      ①在Oracle客戶端向服務(wù)器端提交SQL語句時,Oracle客戶端根據(jù)NLS_LANG和數(shù)據(jù)庫字符集,對從應(yīng)用程序接傳送過來的字符串編碼進行轉(zhuǎn)換處理。如果NLS_LANG與數(shù)據(jù)庫字符集相同,不作轉(zhuǎn)換,否則要轉(zhuǎn)換成數(shù)據(jù)庫字符集并傳送到服務(wù)器。服務(wù)器在接收到字符串編碼之后,對于普通的CHAR或VARCHAR2類型,直接存儲;對于NCHAR或NVARCHAR2類型,服務(wù)器端將其轉(zhuǎn)換為國家字符集再存儲。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考文章

精通 Oracle+Python,第 1 部分:查詢最佳應(yīng)踐

相關(guān)文章

  • python3中str(字符串)的使用教程

    python3中str(字符串)的使用教程

    這篇文章主要介紹了python3中str(字符串)的使用教程,文中介紹的非常詳細,對python3中各種str字符串的操作都包含這篇文章中了,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03
  • django之session與分頁(實例講解)

    django之session與分頁(實例講解)

    下面小編就為大家?guī)硪黄猟jango之session與分頁(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Python線程池的正確使用方法

    Python線程池的正確使用方法

    這篇文章主要介紹了Python線程池的正確使用方法,Python的線程池與Java線程池基本原理和概念是共通的。最大的區(qū)別大概就是語言的區(qū)別吧,感興趣的朋友可以參考下面內(nèi)容
    2021-09-09
  • Python讀取圖像并顯示灰度圖的實現(xiàn)

    Python讀取圖像并顯示灰度圖的實現(xiàn)

    這篇文章主要介紹了Python讀取圖像并顯示灰度圖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python深入學(xué)習(xí)之對象的屬性

    Python深入學(xué)習(xí)之對象的屬性

    這篇文章主要介紹了Python深入學(xué)習(xí)之對象的屬性,本文從較深的層次講解對象屬性的內(nèi)部運行方式,需要的朋友可以參考下
    2014-08-08
  • Python枚舉類定義和使用方法

    Python枚舉類定義和使用方法

    這篇文章主要介紹了Python枚舉類定義和使用方法,文章圍繞主題的相關(guān)資料展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Python+requests+unittest執(zhí)行接口自動化測試詳情

    Python+requests+unittest執(zhí)行接口自動化測試詳情

    這篇文章主要介紹了Python+requests+unittest執(zhí)行接口自動化測試詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • python實現(xiàn)簡單的單變量線性回歸方法

    python實現(xiàn)簡單的單變量線性回歸方法

    今天小編就為大家分享一篇python實現(xiàn)簡單的單變量線性回歸方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • django請求返回不同的類型圖片json,xml,html的實例

    django請求返回不同的類型圖片json,xml,html的實例

    今天小編就為大家分享一篇django請求返回不同的類型圖片json,xml,html的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python識別二維碼的兩種方法詳解

    Python識別二維碼的兩種方法詳解

    在學(xué)習(xí)Python處理二維碼的過程中,我們看到的大多是“用python生成酷炫二維碼”、“用Python制作動圖二維碼”之類的文章。而關(guān)于使用Python批量識別二維碼的教程,并不多見。本文就為大家總結(jié)了Python識別二維碼的兩種方法,感興趣的可以學(xué)習(xí)一下
    2022-06-06

最新評論

兴文县| 周至县| 平罗县| 光山县| 盐边县| 宜阳县| 固镇县| 平湖市| 赣州市| 宁陵县| 台前县| 马鞍山市| 夹江县| 古蔺县| 扎鲁特旗| 虞城县| 砚山县| 兴仁县| 视频| 改则县| 北流市| 黄大仙区| 阳信县| 邛崃市| 三原县| 日土县| 巩义市| 游戏| 宝坻区| 苏州市| 望城县| 临江市| 启东市| 保亭| 洛宁县| 玉龙| 奉新县| 格尔木市| 仙游县| 长治县| 隆德县|