1. 程式人生 > 其它 >python連線Oracle實現增刪查改

python連線Oracle實現增刪查改

一、下載對應的cx_Oracle模組

1.進入到python根目錄下的scripts資料夾

2.在上方路徑輸入cmd,然後回車

3.在cmd中輸入pip install cx_Oracle並回車

二、任務內容

1.建立python函式,對teacher表中資料進行修改,要求SQL語句中,通過引數傳遞值,構建修改值和查詢條件,進行資料修改。

2.建立python函式,刪除course表中的資料,要求SQL語句中,通過引數傳遞值,構建查詢條件,進行資料刪除。

3.建立python函式,查詢對teacher和course表進行資料更新操作前後的結果。

三、程式碼實現

1.首先在圖形化介面工具PLSQL中建立一系列的表:

程式碼如下:

--建立資料表
create table teacherCard
(
tcid int primary key,
tcdesc varchar2(20)
);

create table teacher
(
tid int primary key,
tname varchar2(20),
tcid int references teacherCard(tcid)
);

create table course
(
cid int primary key,
cname varchar2(20),
tid int references teacher(tid)
);
--輸入資料
insert
into teacherCard values(1,'tzdesc'); insert into teacherCard values(2,'twdesc'); insert into teacherCard values(3,'tldesc'); insert into teacher values(1,'tz',1); insert into teacher values(2,'tw',2); insert into teacher values(3,'tl',3); insert into course values(1,'java',1); insert into course values
(2,'html',1); insert into course values(3,'sql',2); insert into course values(4,'web',3); commit;

2.建立好需要的Oracle類

程式碼如下:

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._conn = cx_Oracle.connect('system', 'Csz123456', '127.0.0.1:1521/orcl')
        self.cursor = self._conn.cursor()
        # 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()  

3.實現增刪查改

增加操作:

def add_course(self, value):
      sql = "INSERT INTO course VALUES " + value
      #遊標執行
      self.cursor.execute(sql)
      self.commit
      print("成功增加course表中的資料"

刪除操作:

    def delete_course(self, condition):
        sql = "DELETE course WHERE " + condition
        #遊標執行
        self.cursor.execute(sql)
        self.commit()
        print("成功刪除course表中的資料")

查詢操作:

def queryResult():
        sql1 = "SELECT * FROM teacher"
        sql2 = "SELECT * FROM course"
        oraDb = Oracle('system','Csz123456','127.0.0.1:1521','orcl')
        fields1 = oraDb.queryAll(sql1)
        fields2 = oraDb.queryAll(sql2)
        print(fields1)
        print(fields2)

修改操作:

def update_teacher(self, value, condition):
        sql = "UPDATE teacher SET TNAME = " + value + " WHERE " + condition
        #遊標執行
        self.cursor.execute(sql)
        self,commit
        print("成功修改teacher表中的資料") 

完整的python程式碼:

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._conn = cx_Oracle.connect('system', 'Csz123456', '127.0.0.1:1521/orcl')
        self.cursor = self._conn.cursor()
        # 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 add_course(self, value):
        sql = "INSERT INTO course VALUES " + value
        #遊標執行
        self.cursor.execute(sql)
        self.commit
        print("成功增加course表中的資料"
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 update_teacher(self, value, condition): sql = "UPDATE teacher SET TNAME = " + value + " WHERE " + condition #遊標執行 self.cursor.execute(sql) print("成功修改teacher表中的資料") self.commit() def delete_course(self, condition): sql = "DELETE course WHERE " + condition #遊標執行 self.cursor.execute(sql) self.commit() print("成功刪除course表中的資料") def queryResult(): sql1 = "SELECT * FROM teacher" sql2 = "SELECT * FROM course" oraDb = Oracle('system','Csz123456','127.0.0.1:1521','orcl') fields1 = oraDb.queryAll(sql1) fields2 = oraDb.queryAll(sql2) print(fields1) print(fields2) def test1(): oraDb = Oracle('system','Csz123456','127.0.0.1:1521','orcl') value = "'csz'" condition = "TID = 1" oraDb.update_teacher(value, condition) def test2(): oraDb = Oracle('system','Csz123456','127.0.0.1:1521','orcl') condition = "CID = 1" oraDb.delete_course(condition) print("更新操作之前的表:") queryResult() #test1() test2() print("更新操作之後的表:") queryResult()

四、實驗存在問題和解決辦法

一、下載對應模組cx_Oracle

1.python根目錄下找到scripts資料夾。

2.進入scripts資料夾,雙擊上方路徑,輸入cmd並按回車。

3.cmd中輸入pip install cx_Oracle

增刪查改操作

 1.需要使用commit()來提交。

 2.Oracle中表的建立以及資料的寫入的回顧。

三、Python語法基礎

1.實驗中的def函式、遊標和連線的關閉程式應使用熟練

2.SQL語句中,應對通過引數傳遞值,構建修改值和查詢條件,進行資料修改的操作熟練。

3. 通過Python程式能夠操作Oracle資料庫。

五、執行結果