У меня работает локальный сервер SQL Server, и я могу успешно подключиться к нему.Тем не менее, я сталкиваюсь с проблемой передачи данных из временных файлов CSV.Использование Python import pyodbc для подключения к серверу.
Я пробовал использовать Python Import pymssql, но результаты были хуже, поэтому я остановился на pyodbc.Я также пытался закрывать курсор каждый раз или только в конце, но не к счастью.
Вот фрагмент кода, который я использую.Внизу два разных стиля CSV.Одним из них является временная температура, которая используется для заполнения таблицы SQL Server.Другой для моего личного использования, чтобы убедиться, что я на самом деле собираю информацию в данный момент, но в долгосрочной перспективе будет удален, так что используется только временный CSV.
@_retry(max_retry=1, timeout=1)
def blocked_outbound_utm_scada():
# OTHER CODE EXISTS HERE!!!
# GET Search Results and add to a temp CSV File then send to MS SQL Server
service_search_results_str = '/services/search/jobs/%s/results?output_mode=csv&count=0' % sid
search_results = (_service.request(_host + service_search_results_str, 'GET',
headers={'Authorization': 'Splunk %s' % session_key},
body={})[1]).decode('utf-8')
with tempfile.NamedTemporaryFile(mode='w+t', suffix='.csv', delete=False) as temp_csv:
temp_csv.writelines(search_results)
temp_csv.close()
try:
cursor.execute("BULK INSERT Blocked_Outbound_UTM_Scada FROM '%s' WITH ("
"FIELDTERMINATOR='\t', ROWTERMINATOR='\n', FirstRow = 2);" % temp_csv.name)
conn.commit()
except pyodbc.ProgrammingError:
cursor.execute("CREATE TABLE Blocked_Outbound_UTM_Scada ("
"Date_Time varchar(25),"
"Src_IP varchar(225),"
"Desktop_IP varchar(225));")
conn.commit()
finally:
cursor.execute("BULK INSERT Blocked_Outbound_UTM_Scada FROM '%s' WITH ("
"FIELDTERMINATOR='\t', ROWTERMINATOR='\n', FirstRow = 2);" % temp_csv.name)
conn.commit()
os.remove(temp_csv.name)
with open(_global_path + '/blocked_outbound_utm_scada.csv', 'a', newline='') as w:
w.write(search_results)
w.close()
Я просто пытаюсьполучить информацию в SQL Server, но код, похоже, игнорирует cursor.commit()
.Любая помощь приветствуется в выяснении, что не так.
Заранее спасибо!