python中用os.system+sqlcmd執行sql腳本

1、系統環境python

win7+python2.7mysql

2、python代碼sql

import os
os.system("sqlcmd -S localhost -U sa -P 123456 -d TRAINING -i \"d:\\sql\\tmp.txt\"")

sqlcmd命令參數說明:shell

-S:表示數據庫服務器地址,如localhost數據庫

-U:用戶名,如sawindows

-P: 密碼,如123456bash

-d:數據庫名,如TRAINING服務器

-i:文件路徑,如文件存放在d:\sql\tmp.txt, 須要寫成這樣 \"d:\\sql\\tmp.txt\"python2.7

路徑書寫須要注意下。路徑用雙引號"file_path",外面已經有雙引號了,須要轉義。由於是在windows系統,路徑用反斜槓,也須要轉義下。spa

其餘的參數,能夠經過windows系統中的cmd命令查看:

sqlcmd /?

sqlcmd參數

 

 

 

 

 

 

 

 

 

 

 

3、其餘說明

(1)os.system:python中能夠經過 os.system(cmd) 來執行命令,其效果就像在cmd中執行同樣。另外,在python中調用shell的方法不少,如:

os.system(command)
os.popen(command,mode)
commands.getstatusoutput(command)
subprocess.call(["some_command","some_argument","another_argument_or_path"])
subprocess.Popen(command,shell=True)

關於python中如何調用shell的其餘方法,請參考這篇文章:

http://blog.csdn.net/gray13/article/details/7044453

(2)sqlcmd:在使用的時候會碰到這樣的問題,在windows的cmd命令中輸入sqlcmd,而後輸入命令.....而後.....尼瑪....它沒有任何反應。就像這樣:

sqlcmd沒反應

 

 

 

其實很簡單,寫完語句後,再輸入go就能執行了

go

(3)逐句執行sql

有的時候爲了控制sql的執行,須要逐句執行,這個時候就不能用上面的辦法。須要換個辦法,參考這個:

"""
需求描述:
    要在服務器上指執行sql
    爲了避免影響線上用戶正常使用, 且執行10000行暫停10秒。
    而後用python
    寫了這樣一個文件
    文件存放位置: / root / sql /
    文件名:2 3 4 5 6.....
    這樣作是爲了省事
    用range(2, 24)
    其實能夠寫成讀取目錄文件:os.listdir("/root/sql/")
"""

import os
import time
import math
##讀取文件
for i in range(2, 24):
    ##拼接文件完整路徑
    filename = "/root/sql/" + str(i)
    file = open(filename, 'r')
    ##計數器(控制暫停)
    count = 0
    for line in file:
        count += 1
        if line:
            lines = line[:line.find(';')]
            cmd = "mysql -u root -pxxxx dbname -e " + '"' + lines + '"'
            print cmd
            os.system(cmd)
            print count
            if count == 10000:
                time.sleep(10)
                count = 0
    file.close()

該方法來自:http://2643235.blog.51cto.com/2633235/1406728

相關文章
相關標籤/搜索