如何将数据从Python“提交”到sqlserver?

2024-06-16 14:44:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个本地主机SQL Server正在运行,并且能够成功地连接到它。但是,我遇到了数据不能从临时csv文件传输的问题。使用Python导入pyodbc进行服务器连接。在

我尝试过Python Import pymssql,但结果更糟,所以我一直使用pyodbc。我也尝试过每次都关闭光标,或者只是在最后一次,但没有任何运气。在

这是我正在使用的一段代码。底部是两种不同的csv样式。一个是用于填充SQL Server表的temp。另一个是为我个人使用,以确保我目前确实在收集信息,但是,从长远来看,将被删除,所以只有临时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()

我只是试图将信息输入到sqlserver,但是代码似乎忽略了cursor.commit()。如果你能帮我找出问题所在,我们将不胜感激。在

提前谢谢!在


Tags: csvexecutesqlsearchserveroutboundservicetemp