Как мне получить данные для «фиксации» с Python на SQL Server? - PullRequest
0 голосов
/ 18 апреля 2019

У меня работает локальный сервер 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().Любая помощь приветствуется в выяснении, что не так.

Заранее спасибо!

...