2017-01-19 18 views
0

私はMACアドレス用のデバイスを盗聴しているBluetoothプロジェクトを行っています。私はそれらの嗅覚のアドレスが特定のテーブル(私の場合は "訪問者"と呼ばれる)に保存されることを望みます。テーブルにレコードを挿入するのは、他のテーブルに存在しない場合のみです - MySQL

enter image description here

今、事はあります。テーブルI_year_studentとII_year_studentには、手動で挿入されたレコードがあります。私は発見されたすべてのデバイスをテーブル「ビジター」に保存したい。問題は:テーブルI_year_studentにすでにあるMACアドレスが、デバイスによって再び盗聴されることがありますが、もちろん、それはデータベース「Visitors」に再度正確に保存されます。今私は2つの異なるテーブルに2つの同一のレコードを持っており、私はそれが起こることを望んでいません。

デバイスが特定のMACアドレスを検出した後、レコードが他のテーブルにすでに存在するかどうかを確認する方法はありますか。このような何か:

  • は、私は、データベース内の他のテーブルで同様のレコードがある場合は、「新しい」MACテーブルにそのレコードを挿入する前
  • に取り組む「訪問者」はチェックしました。
  • 同様のレコードがある場合は無視してください。
  • レコードは、「訪問者」

盗聴やテーブルの訪問者への入力環境のためのコードの一部が下に書かれているテーブルに保存する一意の場合:

if len(nearby_devices) > 0: 
print(len(nearby_devices)) 

for addr, name in nearby_devices: 
    try: 

     cur.execute("""INSERT INTO Visitors 
          (Address, Name) 
         VALUES 
          (%s,%s) 
        """, (addr, name) 
        ) 
     con.commit() 

答えて

0

OK、おかげでみんな助けを求めるが、問題を見つけて答えて管理していると思う。

私の状況はこれだった。私は、BluetoothプロトコルでMACアドレスを常に盗聴しているデバイスを持っていて、私が見つけたすべてのアドレスを後で処理するためにMySQLデータベースに保存したかったのです。また、私は例えば、別のプロファイルに基づいて、それらを分離することによって、それらのアドレスを保存したい:

  • mac_address1:カラム:プロファイルID(タイプA
  • mac_address2:カラム:プロファイルID(タイプB
  • mac_address3:カラム:プロファイルID(タイプC)、およびように...

は事が私のデータベースには、すでにいくつかのメートルを持っていること(一部のデバイスが再び盗聴領域に入る可能性があるため、古いかもしれない)新しいProfileをいくつかのProfileIDの下にもう一度保存するようにしたいと思っていました。

私はクエリを書いてテストした後、うまくいきました。私のデバイスは、「新しい」MACアドレスをキャッチするとき

cur.execute("""INSERT INTO ordenador 
          (Address, Name, ProfileID) 
         VALUES 
          (%s,%s,'public') 
         ON DUPLICATE KEY UPDATE 
         ProfileID = VALUES(ProfileID) 
        """, (addr, name) 
        ) 

は今、彼はテーブル「ordenador」に、そのレコードを入力し、「新しい」MACアドレスのレコードがすでに存在する場合、それだけにレコードを更新します古いもの。他のケースでは、そこにレコードが存在しない場合、クエリは私のケースでは "public"のProfileIDでレコードを入力します。

すべての提案と考えが歓迎されます。私はこれがすでに似たような問題を抱えている人に役立つことを願っています。

関連する問題