0

10 秒間隔で MySQL データベースからデータを取得しようとしています。毎秒入ってくるデータの量は可変であるため、10 秒ごとに最新の 50 行を取得する予定です。私の最初の関数はうまく機能し、データを適切に引き出します。

私の 2 番目の関数は、前のプルから重複を削除し、一意のもののみを新しい変数にプッシュすることになっていますが、エラーが発生し、それを修正する方法がわかりません。私の if ステートメントでは、各タプルのすべての要素に一致することは許可されていないようです。これを変更する方法がよくわかりません。

import mysql.connector
import datetime
import requests
from operator import itemgetter
import time

run = True

def sqlPull():
    connection = mysql.connector.connect(user='XXXX', password='XXXXX', host='XXXXXX', database='MeshliumDB')
    cursor = connection.cursor()
    cursor.execute("SELECT TimeStamp, MAC, RSSI FROM wifiscan ORDER BY TimeStamp DESC LIMIT 50;")
    data = cursor.fetchall()
    connection.close()
    time.sleep(10)

データ出力は次のようになります。

[(104346, datetime.datetime(2013, 11, 14, 17, 43, 20), u'00:1E:4C:03:C0:66', u' 16'), (104345, datetime.datetime(2013, 11, 14, 17, 43, 20), u'00:1E:4C:03:C0:66', u' 16'), (104344, datetime.datetime(2013, 11, 14, 17, 43, 19), u'00:26:AB:BB:FB:B8', u' 17'), (104343, datetime.datetime(2013, 11, 14, 17, 43, 18), u'8C:2D:AA:42:0E:67', u' 17'), (104342, datetime.datetime(2013, 11, 14, 17, 43, 17), u'E4:CE:8F:3F:36:E0', u' 13'), (104341, datetime.datetime(2013, 11, 14, 17, 43, 16), u'00:1E:8F:75:82:35', u' 9'), (104340, datetime.datetime(2013, 11, 14, 17, 43, 16), u'00:1E:8F:75:82:35', u' 9'), (104339, datetime.datetime(2013, 11, 14, 17, 43, 15), u'74:44:01:31:D9:E2', u' 9'), (104338, datetime.datetime(2013, 11, 14, 17, 43, 19), u'84:38:35:5E:F8:BA', u' 8'), (104337, datetime.datetime(2013, 11, 14, 17, 43, 15), u'00:26:08:E2:38:F9', u' 8')]




def dupCatch():
    lastPull = []
    for TimeStamp, MAC, RSSI in data:
        if TimeStamp, MAC, RSSI not in lastPull
            data = newData
            else
            lastPull = data

while run == True:
    sqlPull()
    dupCatch()
    print newData



  File "<ipython-input-1-6d9d5eb980c9>", line 20
    if TimeStamp, MAC, RSSI not in lastPull
                ^
SyntaxError: invalid syntax
4

1 に答える 1

2

これはもともとコメントでしたが、役に立ちそうだったので、回答として再投稿します。

コンマ構文は、Python にタプルを作成するように指示します。これが、次の 2 つの動作が同一である理由です。

L = [1, 2, 3]
a, b, c = L

L = [1, 2, 3]
(a, b, c) = L

ただし、これが常に当てはまるとは限らないと思います。たとえば、if ステートメントやループで条件を表現する場合などです。これは、そのような式が python 文法自体の一部ではないことを示している可能性があります。文法はソースコードで編集できるので (私はこれが可能であることを知っていますが、現時点では引用を避けています)、後で独自のフレーバーの python にコンパイルできるため、心配する必要はありません。

ただし、当面は、これらの変数を強制的にタプルに集めて、セット内にそのタプルが存在するかどうかを確認できるようにします。そのために、これを試してください:

if (TimeStamp, MAC, RSSI) not in lastPull:
  # do stuff

EDIT :文法をチェックしましたが、これは本当にそうです。

于 2013-11-15T00:42:05.120 に答える