2011-09-15 58 views
0

我是新來編碼的,所以我對我在設計概念中做出的任何公然的失禮表示歉意。使用Python寫入遠程MySql數據庫

我正在設計一個使用Python的非常基本的應用程序,它將掃描訪問點並將其詳細信息記錄在遠程MySql數據庫中。我的代碼目前正常工作,並將信息寫入本地數據庫沒有問題,但現在我的查詢是,當將值插入遠程數據庫時,它們會有什麼缺陷?寬帶連接將是一個3G移動連接,我擔心的是,如果在沒有3G覆蓋的黑點下運行,我怎麼能阻止它,以便數據在本地保存直到覆蓋範圍恢復?

這裏是我的代碼thusfar: -

while 1: 
    s.send('\n!0 enable CLIENT bssid,mac,manuf,type,minlat,minlon,maxlat,maxlon,agglat,agglon,bestlat,bestlon,gpsfixed,signal_dbm,noise_dbm,firsttime,lasttime') 

    buff = s.recv(512) 
    tmp = buff.split() 
    bssid = tmp[1] 
    mac = tmp[2] 
    manuf = tmp[3] 
    type = tmp[4] 
    minlat = tmp[5] 
    minlon = tmp[6] 
    maxlat = tmp[7] 
    maxlon = tmp[8] 
    agglat = tmp[9] 
    agglon = tmp[10] 
    bestlat = tmp[11] 
    bestlong = tmp[12] 
    gpsfixed = tmp[13] 
    signal_dbm = tmp[14] 
    noise_dbm = tmp[15] 
    firsttime = tmp[16] 
    lasttime = tmp[17] 

    if bssid != mac: 
     cursor.execute("""INSERT INTO data (bssid, mac, manuf, type, 
minlat, minlon, maxlat, maxlon, agglat, agglon, bestlat, bestlong, 
gpsfixed, signal_dbm, noise_dbm, firstime, lasttime) 
         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 
%s, %s, %s, %s, %s, %s, %s)""", 
         (bssid, mac, manuf, type, minlat, minlon, 
maxlat, maxlon, agglat, agglon, bestlat, bestlong, gpsfixed, 
signal_dbm, noise_dbm, firstime, lasttime)) 
    else: 
     pass 

至於說,代碼工作正常,所以它不是真正關心我的代碼,但更多關於使用遠程MySQL數據庫和移動寬帶的時候,我應該考慮哪些問題覆蓋。由於我將在外出時間掃描接入點,因此我知道例如我可能沒有3G覆蓋10分鐘,並且會檢測到200個接入點,因此只是想知道如何處理這個問題?將它們寫入RAM,臨時文件或本地數據庫,然後在3G連接恢復時更新?

感謝

+0

您確定代碼編譯並執行正常嗎?它看起來不像我有效的Python代碼。你也重複了很多,這可能是一個設計問題,但相對來說並不重要。我沒有資格回答您的實際問題。 – RoundTower

+0

RoundTower我剛剛在我的貼子中複製並粘貼了一段代碼。由於代碼不需要審查,因爲它可以工作,所以我可能沒有公佈一些結語,但足以說明在將數據插入本地數據庫時代碼可以工作。謝謝 – Enverlap

回答

0

你可以啓動一個單獨的線程(使用線程模塊)來處理寫入到數據庫。然後只需將要寫入該信息的信息(可能使用Queue模塊)傳遞給該線程並繼續。

數據庫線程可以嘗試遠程寫入,如果失敗,則將數據寫入磁盤上的臨時文件,休眠30秒並再次嘗試。