我试图以10秒的间隔从MySQL数据库中提取数据。由于每秒进入的数据量是可变的,我计划每10秒抽取最近50行。我的第一个功能运行良好,并适当地提取数据。
我的第二个函数应该从前一个pull中删除重复项,并且只将uniques推送到新变量,但是我遇到错误并且不确定如何修复它。似乎对于我的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
答案 0 :(得分:2)
这本来是评论,但它似乎很有帮助,所以我将其作为答案重新发布:
逗号语法告诉python创建一个元组,是的。这就是为什么以下两种行为是相同的:
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
编辑:我检查了the grammar,这似乎确实如此。