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數據庫。
上一篇cx oracle模塊
下一篇( )在右邊oracle