Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
后续:从python执行.sql文件_Python_Sql_Sql Server_Pyodbc_Python Db Api - Fatal编程技术网

后续:从python执行.sql文件

后续:从python执行.sql文件,python,sql,sql-server,pyodbc,python-db-api,Python,Sql,Sql Server,Pyodbc,Python Db Api,一年多前,有人问了这个问题: 我正在用python编写一个脚本,该脚本连接到SQL服务器,并基于一个大(几个GBs).SQL文件中的SQL命令创建和填充数据库 看起来SQLCMD需要下载并安装SQL Server Express。是否有其他方法可以从python执行.sql文件,而不需要使用我的脚本的所有人下载和安装sql Server?pyodbc是否具有此功能 编辑: 还有一个类似的问题: 在这里,同样的解决方案是从命令(在本例中为mysql.exe)调用实用程序,并将文件列为参数 在我看

一年多前,有人问了这个问题:

我正在用python编写一个脚本,该脚本连接到SQL服务器,并基于一个大(几个GBs).SQL文件中的SQL命令创建和填充数据库

看起来SQLCMD需要下载并安装SQL Server Express。是否有其他方法可以从python执行.sql文件,而不需要使用我的脚本的所有人下载和安装sql Server?pyodbc是否具有此功能

编辑:

还有一个类似的问题:

在这里,同样的解决方案是从命令(在本例中为mysql.exe)调用实用程序,并将文件列为参数

在我看来,应该有一种方法可以使用Python的一个DB API库来实现这一点,但我还没有找到它,所以我正在寻找一个类似SQLCMD或MYSQL的*.exe,可以用来从命令行运行该文件

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

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

不确定这是否是您要问的问题,但为什么不直接从Python使用MS SQL呢?有一些类似pymssql的库允许您这样做。也可以使用ODBC


有关Python MS SQL驱动程序的列表,请参见,SQLCMD和其他管理实用程序可免费下载。它们是微软称之为“SQL Server功能包”的一部分

我知道您希望执行大批量导入。要做到这一点,您可能需要检查BCP实用程序。下载

使用SQL还可以执行大容量插入。此命令可以将文件中的数据插入SQL数据库


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

我发现用python读取文件并使用pyodbc成批执行实际上比在外部使用SQLCMD实用程序要快(而且我不必在运行脚本的每台计算机上都安装SQLCMD!)

以下是我使用的代码(因为pyodbc似乎没有
executescript()
方法):


对不起,什么?您正在尝试在未安装服务器的情况下创建数据库???否则,sqlcmd应该与服务器一起安装(尽管它可能不在您的路径上)当然,您也可以使用pyodbc或pymssql连接到数据库,并从文件.No执行命令。服务器已安装。我只需要连接到服务器并从未安装SQL server的计算机远程执行SQL命令。我知道我可以使用pyodbc读取文件并将其内容作为字符串执行,但是,从文件和内存中读取脚本而不是让SQL Server直接从文件中读取脚本似乎太过分了。您如何让服务器“直接读取”文件?如果它位于远程计算机上,服务器将无法直接访问它。您不需要一次读取整个文件,一次只读取一个命令……SQLCMD有连接参数来连接到远程服务器,这不是问题所在(如果是的话,我仍然可以远程连接并引用存储在服务器上的文件——我不担心文件的位置)。我认为我上面的编辑应该有助于澄清我在寻找什么。我一直在使用pyodbc,它在大多数情况下都可以正常工作,直到您需要执行GB大小的.sql文件。pymssql允许您从文件执行查询吗?谢谢,Christian。这不完全是我想听到的答案,但它现在确实回答了我的问题。SQLCMD工作得很好。我想我可以在脚本中包含exe,以便在其他机器上运行它们。这个主意很酷,但它不适用于包含多个对象的复杂脚本。我认为SQLCMD会更容易。
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()