一年前,有人问过这个问题:Execute .sql files that are used to run in SQL Management Studio in python。
我正在python中编写一个连接到SQL服务器的脚本,并根据大(几GB).sql文件中的SQL命令创建和填充数据库。
看起来SQLCMD需要下载并安装SQL Server Express。有没有其他方法从python执行.sql文件,而不需要使用我的脚本的每个人下载和安装SQL Server? pyodbc有这种能力吗?
修改
这是另一个类似的问题: execute *.sql file with python MySQLdb
这里,同样,解决方案是从命令(在本例中为mysql.exe)调用实用程序,并将该文件列为参数。
在我看来应该有一种方法可以使用Python的一个数据库API库来实现这一点,但是我还没有找到它所以我正在寻找像我可以使用的SQLCMD或MYSQL这样的* .exe从命令行运行该文件。
P.S。如果我没有正确地看这个,请随时纠正我。也许下面的代码与从命令行运行一样高效:
for line in open('query.sql','r'):
cursor.execute(line)
答案 0 :(得分:13)
我发现在python中读取文件并使用pyodbc批量执行比在外部使用SQLCMD实用程序更快(并且我不必在运行脚本的每台计算机上安装SQLCMD!)。
这是我使用的代码(因为pyodbc似乎没有executescript()
方法):
with open(scriptPath, 'r') as inp:
for line in inp:
if line == 'GO\n':
c.execute(sqlQuery)
sqlQuery = ''
elif 'PRINT' in line:
disp = line.split("'")[1]
print(disp, '\r')
else:
sqlQuery = sqlQuery + line
inp.close()
答案 1 :(得分:0)
不确定这是否是您要问的但是为什么不直接从Python使用MS SQL?像pymssql这样的库可以让你这样做。或者您可以使用ODBC。
有关Python MS SQL驱动程序的列表,请参阅http://wiki.python.org/moin/SQL%20Server
答案 2 :(得分:0)
SQLCMD和其他管理实用程序可免费下载。它们是微软称之为“SQL Server功能包”的一部分。
我知道您想要执行大量批量导入。为此,您可能需要查看BCP实用程序。下载http://www.microsoft.com/en-us/download/details.aspx?id=16978
使用SQL,您也可以执行BULK INSERT。此命令可以将文件中的数据插入SQL db。
另一种方法当然是将SQL Server Integration Services用于纯ETL作业。