python - 使用pyodbc执行多条语句以 ";"分隔的SQL文件

标签 python pyodbc netezza

我目前正在编写一个脚本来使用 Python 运行多个 SQL 文件,在您提到其他方法之前先了解一下背景知识;这是为了自动化脚本,Python 是我在 Windows 2008 服务器上拥有的唯一工具。我有一个适用于一组的脚本,但问题是当另一组有两个语句而不是一个由“;”分隔的语句时这是我的代码:

import os
import pyodbc

print ("Connecting via ODBC")

conn = pyodbc.connect('DSN=dsn', autocommit=True)

print ("Connected!\n")

 inputdir = 'C:\\path'
cursor = conn.cursor()

for script in os.listdir(inputdir):

   with open(inputdir+'\\' + script,'r') as inserts:

       sqlScript = inserts.readlines()

       sql = (" ".join(sqlScript))

       cursor.execute(sql)

       print (script)

conn.close()

print ('Run Complete!')

所以这段代码可以显示整个文件,但它只执行“;”之前的一条语句。

任何帮助都会很棒!

谢谢。

最佳答案

pyodbc 连接器(或 pymysql)中的 API 不允许在 SQL 调用中使用多个语句。这是引擎解析的问题; API 需要完全理解它传递的 SQL,以便传递多个语句,然后在返回时处理多个结果。

像下面这样对您的脚本稍作修改应该允许您使用单独的连接器单独发送每个语句:

import os
import pyodbc

print ("Connecting via ODBC")

conn = pyodbc.connect('DSN=dsn', autocommit=True)

print ("Connected!\n")

inputdir = 'C:\\path'

for script in os.listdir(inputdir):
    with open(inputdir+'\\' + script,'r') as inserts:
        sqlScript = inserts.readlines()
        for statement in sqlScript.split(';'):
            with conn.cursor() as cur:
                cur.execute(statement)
    print(script)

conn.close()

with conn.cursor() as cur: 为每个语句打开和关闭游标,在每次调用完成后适当退出。

关于python - 使用pyodbc执行多条语句以 ";"分隔的SQL文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38856534/

相关文章:

hadoop - Netezza实用程序NZLOAD将-df位置指向hdfs位置

python - 带有 MySQL 测试的 Django 示例 .travis

python - 在 Python 中生成唯一排列

python - ssl.SSLError : [SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl. c :852) in Docker Python:3. 6-slim

python-3.x - Python PYODBC INSERT - 参数太少

python - 使用 python 连接 SQL Server 时遇到问题

hadoop - 使用unixODBC/isql将数据加载到HDFS

python - 如何在Python中进行参数匹配、捕获

python - 使用 pyodbc 读取 DBF 文件

java - Jruby、JDBC、Netezza