如何使用这些案例在python mysql上进行循环?
我有一个关于python mysql查询的问题。下面是我的程序基于mqtt和mysql数据库的详细信息。当程序订阅带有主题的msg时,然后将其插入mysql数据库 我使用了三个设备Nodemcu作为客户端 订阅的每个主题的每条消息都有相同的时间段。这意味着从每个客户端收到的消息是3倍。我为每个客户端设置了3次发送消息 所以每一条来自客户机的消息,我想填充从1到3的周期列如何使用这些案例在python mysql上进行循环?,python,mysql,sql,mqtt,Python,Mysql,Sql,Mqtt,我有一个关于python mysql查询的问题。下面是我的程序基于mqtt和mysql数据库的详细信息。当程序订阅带有主题的msg时,然后将其插入mysql数据库 我使用了三个设备Nodemcu作为客户端 订阅的每个主题的每条消息都有相同的时间段。这意味着从每个客户端收到的消息是3倍。我为每个客户端设置了3次发送消息 所以每一条来自客户机的消息,我想填充从1到3的周期列 cur=db.cursor() #create table sql="CREATE TABLE TABEL_ALAT (ID
cur=db.cursor()
#create table
sql="CREATE TABLE TABEL_ALAT (ID INT AUTO_INCREMENT PRIMARY KEY, NILAI_TRUST FLOAT, NAMA_ALAT VARCHAR (10), PERIODE INT)"
cur.execute(sql)
def on_connect(client, userdata, flags, rc):
client.subscribe("ALAT1")
client.subscribe("ALAT2")
client.subscribe("ALAT3")
#client1
def on_message_alat1(client, userdata, msg):
sql="INSERT INTO TABEL_ALAT(NILAI_TRUST, NAMA_ALAT, PERIODE) VALUES (%s, %s, %s)"
n=1
while n < 4 #looping for increment to fill PERIODE column
val = (float(msg.payload), "ALAT1", n)
n+=1
cur.execute(sql, val)
db.commit()
#client2
def on_message_alat2(client, userdata, msg):
sql="INSERT INTO TABEL_ALAT(NILAI_TRUST, NAMA_ALAT, PERIODE) VALUES (%s, %s, %s)"
n=1
while n < 4
val = (float(msg.payload), "ALAT2", n)
n+=1
cur.execute(sql, val)
db.commit()
#client3
def on_message_alat3(client, userdata, msg):
sql="INSERT INTO TABEL_ALAT(NILAI_TRUST, NAMA_ALAT, PERIODE) VALUES (%s, %s, %s)"
n=1
while n < 4
val = (float(msg.payload), "ALAT3", n)
n+=1
cur.execute(sql, val)
db.commit()
但我预计该表将显示如下:
---------------------------------
|ID|NILAI_TRUST|NAMA_ALAT|PERIODE|
---------------------------------
|1 | 0.12 | ALAT1 | 1 |
---------------------------------
|2 | 0.34 | ALAT2 | 1 |
---------------------------------
|3 | 0.54 | ALAT3 | 1 |
---------------------------------
|4 | 0.12 | ALAT1 | 2 |
---------------------------------
|5 | 0.34 | ALAT2 | 2 |
---------------------------------
|6 | 0.54 | ALAT3 | 2 |
---------------------------------
|7 | 0.12 | ALAT1 | 3 |
---------------------------------
|8 | 0.34 | ALAT2 | 3 |
---------------------------------
|9 | 0.54 | ALAT3 | 3 |
---------------------------------
所以我的问题是。。。我们是否可以只在消息上的每个函数上循环变量n
,或者有另一种方法
因为我想在下一步处理。我需要使用列句点来过滤SQL查询
谢谢。您确定该表与您描述的一样,因为您的cur.execute(sql,val)不在while循环中,因此我希望每个客户机只能看到一次插入,而不是三次。很抱歉让您误解了。我使用了三个nodemcu设备作为客户端。对于每个客户端,我设置了3次发送消息和发布每个主题。所以,为什么我要做一个函数来调用每个客户端来接收消息@NBK第一条注释说明了一个很好的要点—您的
光标。execute
语句只对每个警报执行一次。
---------------------------------
|ID|NILAI_TRUST|NAMA_ALAT|PERIODE|
---------------------------------
|1 | 0.12 | ALAT1 | 1 |
---------------------------------
|2 | 0.34 | ALAT2 | 1 |
---------------------------------
|3 | 0.54 | ALAT3 | 1 |
---------------------------------
|4 | 0.12 | ALAT1 | 2 |
---------------------------------
|5 | 0.34 | ALAT2 | 2 |
---------------------------------
|6 | 0.54 | ALAT3 | 2 |
---------------------------------
|7 | 0.12 | ALAT1 | 3 |
---------------------------------
|8 | 0.34 | ALAT2 | 3 |
---------------------------------
|9 | 0.54 | ALAT3 | 3 |
---------------------------------