Tornado にこの python コードがあります。
if not usr:
self.lock_tables("write", ['devices_permissions'])
self.db.execute("INSERT devices_permissions SET user_id=%s, network_id=%s, device_id=%s, perm=%s",
usrid, netid, sensid, perm)
self.unlock_tables();
else:
if perm == 0:
self.lock_tables("write", ['devices_permissions'])
self.db.execute("DELETE FROM devices_permissions \
WHERE user_id=%s AND device_id=%s", usrid, sensid)
self.unlock_tables();
else:
self.lock_tables("write", ['devices_permissions'])
self.db.execute("UPDATE devices_permissions SET perm=%s \
WHERE user_id=%s AND device_id=%s", perm, usrid, sensid)
self.unlock_tables();
2 番目のif...elseステートメントに問題があります。私のプログラムは最初のelseブロックに入りますが、2番目のif...elseではif perm == 0ステートメントが機能しないようです。perm変数を出力しましたが、その値は 0 です。そのため、どこでエラーが発生するのかわかりません。
このif...elseステートメントが必要なのは、デバイスに対する権限がなくなったユーザーを DB から削除したいからです。
permは値 0 または 1 の変数です。usrはユーザーのリストです。どうもありがとうございました。
編集
私は次のようにステートメントを変更します。
# Check whether the user has already priviledges on the device
self.lock_tables("read", ['devices_permissions'])
usr = self.db.get("SELECT device_id, user_id FROM devices_permissions \
WHERE user_id=%s AND device_id=%s", usrid, sensid)
self.unlock_tables();
if not usr:
self.lock_tables("write", ['devices_permissions'])
self.db.execute("INSERT devices_permissions SET user_id=%s, network_id=%s, device_id=%s, perm=%s",
usrid, netid, sensid, perm)
self.unlock_tables();
elif perm == 0:
self.lock_tables("write", ['devices_permissions'])
self.db.execute("DELETE FROM devices_permissions \
WHERE user_id=%s AND device_id=%s", usrid, sensid)
self.unlock_tables();
else:
self.lock_tables("write", ['devices_permissions'])
self.db.execute("UPDATE devices_permissions SET perm=%s \
WHERE user_id=%s AND device_id=%s", perm, usrid, sensid)
self.unlock_tables();
そして、いくつかのテストの後、usrリストが空でない場合でも、プログラムは常にif not usrステートメントに入ると思います。どうしたの?