關(guān)于Python如何連接數據庫并執行SQL語(yǔ)句,幾乎所有的Python教程都會(huì )講,教程里基本只介紹了執行單條SQL語(yǔ)句的方法,但是實(shí)際生產(chǎn)過(guò)程中可不只是執行一兩條語(yǔ)句,動(dòng)輒幾十條甚至上百條的SQL語(yǔ)句,一個(gè).SQL的SQL文件正常都會(huì )包含多條SQL語(yǔ)句,如果把這些SQL語(yǔ)句直接貼進(jìn)Python代碼文件,勢必會(huì )影響代碼的可讀性和美感,代碼量也冗余,那么Python能不能像oracle的PL/SQL客戶(hù)端或者navicat一樣讀取SQL文件并且執行會(huì )是一件非常有趣的事情。
經(jīng)過(guò)不斷百度和嘗試,一段優(yōu)雅的Python代碼終于敲出來(lái),作為開(kāi)源的忠實(shí)粉絲,技術(shù)始于分享,現將Python執行SQL文件的代碼分享在CSDN,代碼實(shí)例是oracle數據庫,其他數據庫(如MySQL)可參考。
- import cx_Oracle
- import os
- try:
- os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.utf8'
- db = cx_Oracle.connect('數據庫用戶(hù)名', '數據庫密碼', '數據庫IP地址/數據庫實(shí)例')
- c = db.cursor()
- ##讀取SQL文件,獲得sql語(yǔ)句的list
- with open(u'E:\\test.sql', 'r+') as f:
- sql_list = f.read().split(';')[:-1] # sql文件最后一行加上;
- sql_list = [x.replace('\n', ' ') if '\n' in x else x for x in sql_list] # 將每段sql里的換行符改成空格
- ##執行sql語(yǔ)句,使用循環(huán)執行sql語(yǔ)句
- for sql_item in sql_list:
- # print (sql_item)
- c.execute(sql_item)
- except cx_Oracle.Error as e:
- print e
- finally:
- c.close()
- db.commit()
- db.close()
聯(lián)系客服