SQL文件中包含多个由“;”错误分隔的语句

时间:2019-03-01 14:08:29

标签: sql python-3.7

我正在运行以下代码: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)
)

1 个答案:

答案 0 :(得分:1)

虚拟表会在整个会话中持续存在。

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

如果希望它们在不同的会话中运行,请移动连接并使其靠近最内层的循环