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

歡迎訪問 生活随笔!

生活随笔

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

python

python连接oracle详细教程_[宜配屋]听图阁

發布時間:2023/12/19 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python连接oracle详细教程_[宜配屋]听图阁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 連接對象

操作數據庫之前,首先要建立數據庫連接。

有下面幾個方法進行連接。

>>>import cx_Oracle

>>>db = cx_Oracle.connect('hr', 'hrpwd', 'localhost:1521/XE')

>>>db1 = cx_Oracle.connect('hr/hrpwd@localhost:1521/XE')

>>>dsn_tns = cx_Oracle.makedsn('localhost', 1521, 'XE')

>>>print dsn_tns

>>>print db.version

10.2.0.1.0

>>> versioning = db.version.split('.')

>>> print versioning

['10', '2', '0', '1', '0']

>>> if versioning[0]=='10':

... print "Running 10g"

... elif versioning[0]=='9':

... print "Running 9i"

...

Running 10g

>>> print db.dsn

localhost:1521/XE

2. cursor對象

使用數據庫連接對象的cursor()方法,你可以定義任意數量的cursor對象,簡單的程序可能使用一個cursor,并重復使用了,但大型項目會使用多個不同的cursor。

>>>cursor= db.cursor()

應用程序邏輯通常需要清楚的區分處理數據操作的每個階段。這將幫助更好的理解性能瓶頸和代碼優化。

這些步驟有:

parse(optional)

無需調用該方法,因為執行階段會自動先執行,用于檢查sql語句是否正確,當有錯誤時,拋出DatabaseError異常及相應的錯誤信息。如:‘'ORA-00900:invalid SQL statement.“。

Execute

cx_Oracle.Cursor.execute(

statement,[parameters], **keyword_parameters)

該方法能接收單個參數SQL,直接操作數據庫,也可以通過綁定變量執行動態SQL,parames或keyworparameters可以是字典、序列或一組關鍵字參數。

cx_Oracle.Cursor.executemany(statement,parameters)

特別有用的批量插入,避免一次只能插入一條;

Fetch(optional)

僅用于查詢,因為DDL和DCL語句沒有返回結果。如果cursor沒有執行查詢,會拋出InterfaceError異常。

cx_Oracle.Cursor.fetchall()

獲取所有結果集,返回元祖列表,如果沒有有效行,返回空列表。

cx_Oracle.Cursor.fetchmany([rows_no])

從數據庫中取下一個rows_no數據

cx_Oracle.Cursor.fetchone()

從數據庫中取單個元祖,如果沒有有效數據返回none。

3. 綁定變量

綁定變量查詢可以提高效率,避免不必要的編譯;參數可以是名稱參數或位置參數,盡量使用名稱綁定。

>>>named_params = {'dept_id':50, 'sal':1000}

>>>query1 = cursor.execute('SELECT * FROM employees WHERE department_id=:dept_idAND salary>:sal', named_params)

>>> query2 = cursor.execute('SELECT * FROM employees WHERE department_id=:dept_idAND salary>:sal', dept_id=50, sal=1000)

Whenusing named bind variables you can check the currently assigned ones using thebindnames() method of the cursor:

>>> printcursor.bindnames()

['DEPT_ID', 'SAL']

4. 批量插入

大量插入插入操作,可以使用python的批量插入功能,無需多次單獨調用insert,這樣可以提升性能。參考后面示例代碼。

5. 示例代碼

'''

Created on 2016年7月7日

@author: Tommy

'''

import cx_Oracle

class Oracle(object):

""" oracle db operator """

def __init__(self,userName,password,host,instance):

self._conn = cx_Oracle.connect("%s/%s@%s/%s" % (userName,password,host,instance))

self.cursor = self._conn.cursor()

def queryTitle(self,sql,nameParams={}):

if len(nameParams) > 0 :

self.cursor.execute(sql,nameParams)

else:

self.cursor.execute(sql)

colNames = []

for i in range(0,len(self.cursor.description)):

colNames.append(self.cursor.description[i][0])

return colNames

# query methods

def queryAll(self,sql):

self.cursor.execute(sql)

return self.cursor.fetchall()

def queryOne(self,sql):

self.cursor.execute(sql)

return self.cursor.fetchone()

def queryBy(self,sql,nameParams={}):

if len(nameParams) > 0 :

self.cursor.execute(sql,nameParams)

else:

self.cursor.execute(sql)

return self.cursor.fetchall()

def insertBatch(self,sql,nameParams=[]):

"""batch insert much rows one time,use location parameter"""

self.cursor.prepare(sql)

self.cursor.executemany(None, nameParams)

self.commit()

def commit(self):

self._conn.commit()

def __del__(self):

if hasattr(self,'cursor'):

self.cursor.close()

if hasattr(self,'_conn'):

self._conn.close()

def test1():

# sql = """select user_name,user_real_name,to_char(create_date,'yyyy-mm-dd') create_date from sys_user where id = '10000' """

sql = """select user_name,user_real_name,to_char(create_date,'yyyy-mm-dd') create_date from sys_user where id =: id """

oraDb = Oracle('test','java','192.168.0.192','orcl')

fields = oraDb.queryTitle(sql, {'id':'10000'})

print(fields)

print(oraDb.queryBy(sql, {'id':'10000'}))

def test2():

oraDb = Oracle('test','java','192.168.0.192','orcl')

cursor = oraDb.cursor

create_table = """

CREATE TABLE python_modules (

module_name VARCHAR2(50) NOT NULL,

file_path VARCHAR2(300) NOT NULL

)

"""

from sys import modules

cursor.execute(create_table)

M = []

for m_name, m_info in modules.items():

try:

M.append((m_name, m_info.__file__))

except AttributeError:

pass

sql = "INSERT INTO python_modules(module_name, file_path) VALUES (:1, :2)"

oraDb.insertBatch(sql,M)

cursor.execute("SELECT COUNT(*) FROM python_modules")

print(cursor.fetchone())

print('insert batch ok.')

cursor.execute("DROP TABLE python_modules PURGE")

test2()

以上這篇python操作oracle的完整教程分享就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持【聽圖閣-專注于Python設計】。

總結

以上是生活随笔為你收集整理的python连接oracle详细教程_[宜配屋]听图阁的全部內容,希望文章能夠幫你解決所遇到的問題。

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