多个语句的SQL文件,以“;”错误分隔

问题描述 投票:0回答:1

我正在运行下面的代码:SQL脚本的第一部分创建一个表,并以';'结束然后sql的第二部分创建另一个表。当运行python脚本时,它似乎创建表但是然后循环,我得到一个错误:

pyodbc.Error :(('HY000','[HY000]虚拟表'MY_FIRST_TABLE_NAME'已经存在。(1000)(SQLExecDirectW)')

我的代码:

import pyodbc
import getpass
import os
print ("Connecting via ODBC")
windows_password=getpass.getpass('Enter your windows password please')
composite_connection=pyodbc.connect("Driver=my driver;HOST=my host;PORT=my port;UID={0};PWD={1};DOMAIN=my domain;DATASOURCE=my datasource".format(getpass.getuser(),windows_password),autocommit=True)
print ("You are Connected\n")
inputdir = 'C:\\Users\\abc01'
for script in os.listdir(inputdir):
    with open(inputdir+'\\' + 'my_sql_script.sql','r') as inserts:
        sqlScript = inserts.read()
        for statement in sqlScript.split(';'):
            with composite_connection.cursor() as cur:
                cur.execute(statement)
    print(script)
composite_connection.close()
>

这是sql:

CREATE TABLE DB.Table_1
(
    ORDER_INFO_ID VARCHAR(30),
    ACCOUNT_NUMBER VARCHAR(30),
    ORDER_ID VARCHAR(20),
    MOBILE_NUMBER VARCHAR(20),
    ADD_FIRST_LINE VARCHAR(150),
    POSTCODE_LAST VARCHAR(5)
)
;
CREATE TABLE DB.Table_2
(ACCOUNT_NUMBER VARCHAR (30),
MOBILE_NUMBER VARCHAR (30)
)
sql python-3.7
1个回答
1
投票

虚拟表在整个会话期间保持不变。

如果第一个查询创建虚拟表,则循环执行同一会话中的所有查询,然后当第二个查询尝试创建相同的虚拟表时,您将获得错误。

如果您希望它们在不同的会话中运行,请移动连接并关闭最内层循环内部

© www.soinside.com 2019 - 2024. All rights reserved.