2011-09-15 18 views
0

私はコーディングが新しく、私のデザインコンセプトの中で暴力的な偽の謝罪をしたことをお詫びします。Pythonを使用してリモートMySql DBに書き込む

私は、アクセスポイントをスキャンし、その詳細をリモートMySqlデータベースに記録する、Pythonを使用して非常に基本的なアプリケーションを設計しようとしています。私のコードは現在正常に動作し、ローカルに保持されているデータベースに問題はありませんが、私のクエリは、リモートDBに値を挿入しようとするとどうなりますか?ブロードバンド接続は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 DBとモバイルブロードバンドを使用しているとき、私は検討すべきかについての私のコードが、より多くについての質問ではありません、と述べましたカバレッジ。私がアクセスポイントをスキャンしている間、私は例えば10分の3Gカバレッジがないことを知っていて、200のアクセスポイントを検出したので、これにどう対処するのが最善か疑問に思っています。それらをRAM、一時ファイル、またはローカルDBに書き込み、3G接続が完了したら更新しますか?

おかげ

+0

コードをコンパイルしてOKを実行してもよろしいですか?それは私にとって有効なPythonコードのようには見えません。また、デザイン上の問題がありますが、比較的重要ではありません。あなたの実際の質問に答える資格はありません。 – RoundTower

+0

RoundTower私は投稿したコードをコピーして貼り付けました。コードは動作しているので、コードを見直す必要はないので、例えば、いくつかの終了ステートメントを投稿していないかもしれませんが、ローカルDBにデータを挿入するときにコードが機能するといっても過言ではありません。ありがとう – Enverlap

答えて

0

データベースへの書き込みを処理するために(threadingモジュールを使用して)別のスレッドを起動することができます。それから、そのスレッドに書き込まれる情報を渡し(おそらくQueueモジュールを使用して)、実行してください。

データベーススレッドはリモート書き込みを試みることができます。失敗した場合は、ディスク上の一時ファイルにデータを書き込み、30秒間スリープしてもう一度試します。

関連する問題