Pyodbc: объект nonetype не может быть повторен

#python #sql #pandas #pyodbc

Вопрос:

Я пытаюсь выполнить SQL-запрос через соединение pyodbc с помощью приведенного ниже кода. Я удалил все » GO «из кода SQL, так как это вызвало ошибку 102 ошибки вокруг «GO». Однако теперь я получаю следующую ошибку: «Ошибка типа: объект «Нетип» не может быть повторен». У кого-нибудь есть предложение?

 server = "xxx"
db = "xxxx"

cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                  "Server="   server   ";"
                                       "Database="   db   ";"
                                                          "Trusted_Connection=yes;")

# cnxn.setdecoding(db.SQL_CHAR, encoding='latin1')
# cnxn.setencoding('latin1')


sql_string =  fr""" 

        if OBJECT_ID('output') is not null begin drop table [output] end

create table output (filename varchar(200), id INT identity(1,1))

--kiezen

INSERT INTO output EXEC xp_cmdshell 'dir /b "E:User Dataxxxxxxxx*.tsv"';

--of

--INSERT INTO output EXEC xp_cmdshell 'dir /b "E:User Dataxxxxxxxx*.bulk"';  


TRUNCATE TABLE merkBulkFile

DECLARE @SQLSTRING VARCHAR(MAX) = ''
DECLARE @CURID INT = 1
DECLARE @MAXID INT 
SELECT @MAXID = MAX(ID) FROM output 

WHILE @CURID <= @MAXID
BEGIN
       SELECT @SQLSTRING = 'BULK INSERT merkBulkFile FROM ''E:User Dataxxxxxxxx'   filename   ''' WITH (FORMAT=''CSV'',FIELDTERMINATOR =''t'');
       '
       FROM Output
       WHERE ID = @CURID AND FILENAME IS NOT NULL

       IF @SQLSTRING IS NOT NULL
              EXEC (@SQLSTRING)

       SET @CURID = @CURID   1;
END

"""


def _get_connection() -> pyodbc.Connection:
    connection_string = fr'Driver=SQL Server;Server={server};Database= 
{db};Trusted_Connection=yes;'
    return pyodbc.connect(connection_string, autocommit=True)


def execute_query(sql_string: str) -> pd.DataFrame:
     with _get_connection() as connection:
         return pd.read_sql(sql=sql_string, con=connection)


# pd.read_sql(sql=sql_string, con=_get_connection)


#
# pd.read_sql()

execute_query(sql_string)