10

一年多以前,有人问过这个问题: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 的 DB API 库之一来执行此操作,但我还没有找到它,所以我正在寻找可以用来运行该文件的 SQLCMD 或 MYSQL 之类的 *.exe从命令行。

PS如果我看的不正确,请随时纠正我。也许下面的代码与从命令行运行一样高效:

for line in open('query.sql','r'):
    cursor.execute(line)
4

3 回答 3

16

我发现在 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()
于 2012-05-09T16:36:45.897 回答
0

不确定这是否是您要问的,但为什么不直接从 Python 使用 MS SQL?有像 pymssql 这样的库可以让你做到这一点。或者您可以使用 ODBC。

有关Python MS SQL 驱动程序的列表,请参阅http://wiki.python.org/moin/SQL%20Server

于 2012-04-30T19:26:59.990 回答
0

SQLCMD 和其他管理实用程序可免费下载。它们是 Microsoft 所称的“SQL Server 功能包”的一部分。

我了解您想要进行大批量导入。为此,您可能需要查看 BCP 实用程序。下载http://www.microsoft.com/en-us/download/details.aspx?id=16978

使用 SQL,您还可以执行 BULK INSERT。此命令可以将文件中的数据插入 SQL 数据库。

另一种方法当然是使用 SQL Server Integration Services 来处理纯 ETL 作业。

于 2012-04-30T20:17:19.310 回答