您好,登錄后才能下訂單哦!
小編給大家分享一下ORACLE中CX_ORACLE庫怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1、安裝cx_Oracle包:
pip install cx_Oracle
當前版本7.0
2、創建數據庫連接的三種方式:
方法一:用戶名、密碼和監聽分開寫
import cx_Oracle
db=cx_Oracle.connect('username/password@host/orcl')
db.close()
方法二:用戶名、密碼和監聽寫在一起
import cx_Oracle
db=cx_Oracle.connect('username','password','host/orcl')
db.close()
方法三:配置監聽并連接
import cx_Oracle
tns=cx_Oracle.makedsn('host',1521,'orcl')
db=cx_Oracle.connect('username','password',tns)
db.close()
3、建立cursor并執行SQL語句:查詢、更新、插入、刪除
創建數據庫連接,創建游標cursor,然后執行sql語句,執行完成后,關閉游標,關閉數據庫連接
創建連接后,建立cursor,并執行SQL語句
#encoding=utf-8
# 示例
import cx_Oracle
conn = cx_Oracle.connect('system/oracle@192.0.2.7/orcl')
cursor = conn.cursor()
#執行語句的兩種方式,預處理和直接執行
# 首先準備該語句,然后利用改變的參數執行 None。根據綁定變量時準備一個語句即足夠這一原則,Oracle 將如同在上例中一樣對其進行處理。準備好的語句可執行任意次。
sql = "select * from dba_users where user_id = :dbv"
cursor.prepare(sql)
rs = cursor.execute (None,{'dbv':63})
rsa = cursor.fetchall()
print (rsa)
# 直接執行
cursor.execute ("select * from dba_users where user_id=62")
row = cursor.fetchone ()
print (row[0])
cursor.close ()
conn.close()
import cx_Oracle
# 創建連接后,建立cursor,并執行SQL語句
db=cx_Oracle.connect('system','oracle','10.98.156.148/oral')
# db.close()
cr = db.cursor() # 創建cursor
sql = 'select * from v$version'
cr.execute(sql) # 執行sql語句
# 一次返回所有結果集 fetchall
rs = cr.fetchall()
print("print all:(%s)" %rs)
for x in rs:
print (x)
# 一次返回一行 fetchone
print("fetchone")
cr.execute(sql)
while (1):
rs = cr.fetchone()
if rs == None:
break
print(rs)
#使用參數查詢
pr = {'dbv':'61'}
cr.execute('select * from dba_users where user_id = :dbv',pr)
# 這里將參數作為一個字典來處理
rs = cr.fetchall()
print("parameter print all:(%s)" %rs)
cr.execute('select * from dba_users where user_id = :dbv',dbv = '61')
# 這里直接寫參數
rs = cr.fetchall()
print("parameter print all: (%s)" %rs)
cr.close()
db.close()
# 插入、更新、刪除操作后需要提交commit
# 查詢include:select
def sqlSelect(sql,db):
cr=db.cursor()
cr.execute(sql)
rs=cr.fetchall()
cr.close()
return rs
# 插入、更新、刪除操作后需要提交include:insert,update,delete
def sqlDML(sql,db):
cr=db.cursor()
cr.execute(sql)
cr.close()
db.commit()
# execute dml with parameters
def sqlDML2(sql,params,db):
cr=db.cursor()
cr.execute(sql,params)
cr.close()
db.commit()
#增刪改查 示例
#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})
#在綁定時,您可以首先準備該語句,然后利用改變的參數執行 None。根據綁定變量時準備一個語句即足夠這一原則,Oracle 將如同在上例中一樣對其進行處理。準備好的語句可執行任意次。
r1 = cursor.execute('SELECT * FROM locations WHERE country_id=:1 AND city=:2', ('US', 'Seattle'))
#數據庫操作簡單工具
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
# 摘錄oracle官方文檔https://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python-1391323-zhs.html
# oracle 日期函數
# 使用 EXTRACT 語句通過 SQL 查詢將年、月、日這些字段提取出來
SELECT EXTRACT(YEAR FROM hire_date) FROM employees ORDER BY 1;
使用 Python 的 datetime.date、datetime.time 和 datetime.datetime 對象作為綁定變量來查詢日期
如果您需要將現有的字符串分析為 date(time) 對象,可以使用 datetime 對象的 strptime() 方法。
>>> from datetime import datetime
>>> datetime.strptime("2007-12-31 23:59:59", "%Y-%m-%d %H:%M:%S")
datetime.datetime(2007, 12, 31, 23, 59, 59)
>>> import datetime
>>> d = datetime.datetime.now()
>>> print d
2007-03-03 16:48:27.734000
>>> print type(d)
<type 'datetime.datetime'>
>>> print d.hour, d.minute, d.second
(16, 48, 27)
--EXTRACT() 函數用于提取日期/時間的單獨部分,比如年、月、日、小時、分鐘等等。
select sysdate,
extract(year from sysdate),
extract(month from sysdate),
extract(day from sysdate)
from dual s;
SELECT EXTRACT(HOUR FROM TIMESTAMP '2010-01-10 11:12:13'),
EXTRACT(minute FROM TIMESTAMP '2010-01-10 11:12:13'),
EXTRACT(second FROM TIMESTAMP '2010-01-10 11:12:13')
FROM DUAL;
#精通 Oracle+Python,第 3 部分:數據解析
https://www.oracle.com/technetwork/cn/articles/dsl/prez-python-dataparsing-087750-zhs.html
有關使用正則表達式的最好建議是盡可能地避免使用它們。在將它們嵌入代碼前,請確定沒有字符串方法可以完成相同的工作,因為字符串方法更快且不會帶來導入以及正則表達式處理這些額外的開銷。在字符串對象上使用 dir() 就可以看到可用的內容。
下例展示了在 Python 這樣一種動態語言中看待正則表達式的方式。解析 tnsnames.ora 文件以便為每個網絡別名創建簡單連接字符串(將 file() 函數指向您的 tnsnames.ora 文件的位置):
>>> import re
>>> tnsnames = file(r'tnsnames.ora').read()
>>> easy_connects = {}
>>> tns_re = "^(\w+?)\s?=.*?HOST\s?=\s?(.+?)\).*?PORT\s?=\s?(\d+?)\).*?SERVICE_NAME\s?=\s?(.+?)\)"
>>> for match in re.finditer(tns_re, tnsnames, re.M+re.S):
... t = match.groups()
... easy_connects[t[0]] = "%s:%s/%s" % t[1:]
>>> print easy_connects
此程序在 Oracle Database XE 默認的 tnsnames.ora 文件上的輸出是:
{'XE': 'localhost:1521/XE'}
以上是“ORACLE中CX_ORACLE庫怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。