欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

cx oracle 封裝

洪振霞1年前7瀏覽0評論

CX Oracle是Python與Oracle數據庫交互的一種方式,但它畢竟是Python,與Oracle的操作封裝還不夠完善。所以,我們需要適當地對CX Oracle進行封裝,以便在開發中更好地使用。

比如,我們可以對查詢結果進行封裝,將結果轉換成數據類,使其對程序更加友好。以下是一個簡單的例子。

import cx_Oracle
class Oracle():
def __init__(self, user, password, service, host):
self.user=user
self.password=password
self.service=service
self.host=host
def connection(self):
tns=cx_Oracle.makedsn(self.host,1521,self.service)
db=cx_Oracle.connect(self.user,self.password,tns,cx_Oracle.SYSDBA)
cursor=db.cursor()
return db,cursor
def execute(self, sql, param=None):
db,cursor=self.connection()
result=None
if param is None:
cursor.execute(sql)
else:
cursor.execute(sql, param)
if cursor.description is not None:
fields=[i[0] for i in cursor.description]
rows=cursor.fetchall()
result=[]
for r in rows:
result.append(dict(zip(fields,r)))
db.commit()
cursor.close()
db.close()
return result   
if __name__=='__main__':
o=Oracle('user', 'pwd', 'service', 'host')
r=o.execute('select * from table')
print(r)

在上述代碼中,我們對CX Oracle進行了簡單的封裝。通過execute方法查詢數據庫,并將結果轉換成字典的列表。通過這種方式,我們可以更方便地使用查詢結果。

另一個例子,我們可以封裝一些基礎的操作,例如增、刪、改、查。以下是一個簡單的例子。

class Oracle():
def __init__(self, user, password, service, host):
self.user=user
self.password=password
self.service=service
self.host=host
def connection(self):
tns=cx_Oracle.makedsn(self.host,1521,self.service)
db=cx_Oracle.connect(self.user,self.password,tns,cx_Oracle.SYSDBA)
cursor=db.cursor()
return db,cursor
def insert(self, table, record):
db,cursor=self.connection()
keys=list(record.keys())
values=[record[k] for k in keys]
sql='INSERT INTO {}({}) VALUES({})'.format(table, ','.join(keys), ','.join([':'+str(i+1) for i in range(len(keys))]))
cursor.execute(sql, values)
db.commit()
cursor.close()
db.close()
def delete(self, table, cond):
db,cursor=self.connection()
sql='DELETE FROM {} WHERE {}'.format(table, cond)
cursor.execute(sql)
db.commit()
cursor.close()
db.close()
def update(self, table, record, cond):
db,cursor=self.connection()
keys=list(record.keys())
values=[record[k] for k in keys]
sql='UPDATE {} SET {} WHERE {}'.format(table, ','.join(['{}=:{}'.format(k,k) for k in keys]), cond)
param=record
param.update({'cond':cond})
cursor.execute(sql, param)
db.commit()
cursor.close()
db.close()
def select(self, table, columns, cond):
db,cursor=self.connection()
sql='SELECT {} FROM {} WHERE {}'.format(','.join(columns), table, cond)
cursor.execute(sql)
rows = cursor.fetchall()
fields = [i[0] for i in cursor.description]
result = []
for r in rows:
result.append(dict(zip(fields,r)))
cursor.close()
db.close()
return result
if __name__=='__main__':
o=Oracle('user', 'pwd', 'service', 'host')
o.insert('table',{'name':'Tom', 'age':20})
o.update('table',{'name':'Jerry', 'age':25}, 'name=:name',{'name':'Tom'})
o.delete('table', 'name=:name',{'name':'Jerry'})
r=o.select('table', ['name','age'], 'age>20')
print(r)

在上述代碼中,我們對CX Oracle進行了針對增、刪、改、查的封裝。通過這種方式,我們可以更方便地對Oracle數據庫進行常規操作。

總之,CX Oracle是Python與Oracle數據庫交互的重要途徑之一。通過適當的封裝,我們可以更加方便地使用CX Oracle來操作Oracle數據庫。