python运行sql文件_python中用os.system+sqlcmd执行sql脚本

一、系统环境

win7+python2.7

二、python代码

import os

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

sqlcmd命令参数说明:

-S:表示数据库服务器地址,如localhost

-U:用户名,如sa

-P: 密码,如123456

-d:数据库名,如TRAINING

-i:文件路径,如文件存放在d:\sql\tmp.txt, 需要写成这样 \"d:\\sql\\tmp.txt\"

路径书写需要注意下。路径用双引号"file_path",外面已经有双引号了,需要转义。因为是在windows系统,路径用反斜杠,也需要转义下。

其他的参数,可以通过windows系统中的cmd命令查看:

sqlcmd /?

三、其他说明

(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的其他方法,请参考这篇文章:

(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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值