#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)