Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据从Python“提交”到SQL Server?_Python_Sql Server_Splunk_Temporary Files - Fatal编程技术网

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

如何将数据从Python“提交”到SQL Server?,python,sql-server,splunk,temporary-files,Python,Sql Server,Splunk,Temporary Files,我有一个本地主机SQL Server正在运行,并且能够成功连接到它。但是,我遇到了数据无法从临时csv文件传输的问题。使用Python导入pyodbc进行服务器连接 我尝试过使用Python导入pymssql,但结果更糟,所以我坚持使用pyodbc。我也尝试过每次或在最后关闭光标,但没有任何运气 下面是我正在使用的一段代码。底部是两种不同的csv样式。一个是用于填充SQL Server表的temp。另一个是供我个人使用,以确保我目前确实在收集信息,但从长远来看,将被删除,因此仅使用临时csv @

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

我尝试过使用Python导入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()
我只是尝试将信息输入SQL Server,但代码似乎忽略了cursor.commit。任何有助于找出问题所在的人都将不胜感激

提前谢谢

在没有conn.commit的情况下尝试


我不明白它为什么工作或如何工作,但在我看来,pyodbc似乎也忽略了commit子句。

因为它不在代码中,所以您是否先打开游标?任何select或其他语句都有效吗?你到底有没有收到错误?是的,我有conn=pyodbc.connect'DRIVER={sqlserver};''服务器=服务器;“”数据库=ITD度量;“”受信任的\u连接=是;'cursor=conn.cursor位于代码顶部。我建议您使用最后一个大容量插入语句,并在ManagementStudio中直接对您的数据库运行它。这样,您将看到可能来自大容量插入的任何错误,如溢出或权限错误。@RussellFox我尝试了这个方法,发现在sql获取并使用它之前,信息正在消失。谢谢你的帮助!