我正在运行下面的代码: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)
)
虚拟表在整个会话期间保持不变。
如果第一个查询创建虚拟表,则循环执行同一会话中的所有查询,然后当第二个查询尝试创建相同的虚拟表时,您将获得错误。
如果您希望它们在不同的会话中运行,请移动连接并关闭最内层循环内部