跟进:从python执行.sql文件

时间:2012-04-30 17:28:07

标签: python sql sql-server pyodbc python-db-api

一年前,有人问过这个问题: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)

3 个答案:

答案 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作业。