2016-06-16 10 views
1

pingツールのようにすべて機能していますが、MySQLのアップデートに失敗しています。PythonとMySQL UPDATE

現在実行中のIPアドレスを取得し、MYSQLで更新する必要があります。

import MySQLdb 
db = MySQLdb.connect(host="10.1.1.151", # your host, usually localhost 
        user="root",   # your username 
        passwd="**************", # your password 
        db="main_system")  # name of the data base 
cur = db.cursor() 

from threading import Thread 
import subprocess 
from Queue import Queue 

num_threads = 10 
queue = Queue() 

ips = ["10.1.1.151", "10.1.1.152"] 

#wraps system ping command 
def pinger(i, q): 
    """Pings subnet""" 
    while True: 
     ip = q.get() 
     ret = subprocess.call("ping -i .1 -c 1 -W 50 %s" % ip, 
      shell=True, 
      stdout=open('/dev/null', 'w'), 
      stderr=subprocess.STDOUT) 
     if ret == 0: 
      cur.execute("UPDATE application_status SET status = 1 WHERE ip_address = %s") 
      print "%s: is alive" % ip 
     else: 
      cur.execute("UPDATE application_status SET status = 0 WHERE ip_address = %s") 
      print "%s: did not respond" % ip 
     q.task_done() 
#Spawn thread pool 
for i in range(num_threads): 

    worker = Thread(target=pinger, args=(i, queue)) 
    worker.setDaemon(True) 
    worker.start() 
#Place work in queue 
for ip in ips: 
    queue.put(ip) 
#Wait until worker threads are done to exit  
queue.join() 

答えて

0

問題は、あなたがcur.execute()を呼び出した後、トランザクションをcommitする必要があるかもしれません。

したがって、すべての取引が実行された後にdb.commit()に電話する必要があります。

希望すると便利です。

+0

よし ProgrammingError:(1064年、「あなたはSQLでエラーが発生しています構文は、右側の構文が1行目の '%s'近くで使用するようにMySQLサーバのバージョンに対応するマニュアルを確認してください。) – StephenM

+0

NVMが動作するようにしました。ヘルプありがとう – StephenM

1

カーソルのデータ(IP)の結合を逃している:私はその変更をしたし、まだ持っ問題

if ret == 0: 
    cur.execute("UPDATE application_status SET status = 1 WHERE ip_address = %s", (ip,))     
    print "%s: is alive" % ip 
else: 
    cur.execute("UPDATE application_status SET status = 0 WHERE ip_address = %s", (ip,)) 
    print "%s: did not respond" % ip 
+0

どうすればいいですか?私はPythonに新しいです – StephenM

+0

@StephenM私は私の答えで共有したコードスニペットを参照してください – Mureinik

+1

ああ私は盲目です。ご協力いただきありがとうございます :) – StephenM