日韩性视频-久久久蜜桃-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详细教程_[宜配屋]听图阁的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩有码中文字幕在线观看 | 免费无码不卡视频在线观看 | 99久久精品免费 | 男女瑟瑟视频 | 理论片中文字幕 | 国产区视频在线观看 | 欧美欧美欧美欧美 | 在线观看高h| 国产欧美日韩精品在线观看 | 国产精品美女自拍视频 | 黄色小说在线视频 | 国产成人免费电影 | 未满十八18禁止免费无码网站 | 青青草视频 | 欧美女优在线 | 成人网免费视频 | 亚洲美女啪啪 | 一级黄色在线 | 日批免费观看 | 久热超碰 | 激情欧美一区二区三区 | 天天综合影院 | 91av观看| 黄色精品免费 | 日韩大片免费观看视频播放 | 亚洲一区在线视频观看 | 欧洲精品视频在线 | 91看片淫黄大片91桃色 | www.色视频| 中文字幕大全 | 成人精品影院 | 神马午夜不卡 | 久久网站免费 | 日韩美女一级片 | 国产青青草| 九九av | 草草在线观看视频 | 都市激情亚洲一区 | 精品无码av一区二区三区不卡 | 老师张开让我了一夜av | 日韩国产一区二区三区 | 久久综合久 | 国产精品极品 | 久久久精品视频免费 | 欧美专区第一页 | 国产午夜精品一区二区三区欧美 | 狠狠躁天天躁综合网 | 日本一区久久 | 日韩网站视频 | 欧洲国产精品 | www色日本| 天天爱天天插 | 久久资源在线 | 国产精选中文字幕 | 中文字幕人妻一区二区在线视频 | 日本三级韩国三级三级a级中文 | 日韩激情网 | 成人中文网 | 国产青青草视频 | 色网站视频 | 亚洲一区网 | 精品人妻一区二区三区蜜桃 | 日婷婷| 国产精品免费一区二区三区在线观看 | 成年人免费网 | 午夜在线播放 | 精品一区欧美 | 亚洲欧美自拍一区 | 女生喷液视频 | 不卡av在线播放 | 国产精品白浆一区二小说 | 免费黄网在线观看 | 久久久久久久久久一区二区 | 欧美色资源 | 亚洲精选中文字幕 | 91亚洲专区 | 午夜精品久久久内射近拍高清 | 人人搞人人 | 色多多网站 | 欧美一区二区三区在线视频 | 一道本视频在线 | 91蝌蚪少妇 | 成人拍拍视频 | 四虎影视成人永久免费观看亚洲欧美 | 香蕉精品视频在线观看 | 国产一级片久久 | 午夜影音 | 国产乱码精品一区二区三区五月婷 | 欧洲在线观看 | 国产高清一区在线观看 | 欧美激情一区二区三区免费观看 | 亚洲污片 | 亚洲精品天堂成人片av在线播放 | 秘密基地电影免费版观看国语 | 另类一区二区三区 | 日韩资源站 | 啪啪视屏 | 99re99热 | 一级片视频网站 |