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 /?
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,而後輸入命令.....而後.....尼瑪....它沒有任何反應。就像這樣:
其實很簡單,寫完語句後,再輸入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()