簡體   English   中英

如何讓數據從 Python“提交”到 SQL Server?

[英]How do I get Data to 'commit' from Python to SQL Server?

我有一個本地主機 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() 在找出問題所在方面,我們將不勝感激。

提前致謝!

在沒有conn.commit的情況下嘗試。

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

嘗試在 pymssql.connect() 中更改自動提交參數

conn = pymssql.connect(host=my_host, user=my_user, password=my_password, database=my_database, autocommit=True)
conn = pymssql.connect(host=my_host, user=my_user, password=my_password, database=my_database, autocommit=False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM