错误 MySQL python。尝试使用传感器值字符串输入值

Posted

技术标签:

【中文标题】错误 MySQL python。尝试使用传感器值字符串输入值【英文标题】:Error MySQL python. Trying to put values with strings of sensors values 【发布时间】:2021-12-02 06:02:01 【问题描述】:

您好,我正在对我的 ESP8266 进行编程,就像客户端发送 pH 传感器和流量计的数据一样。 为了发送 ESP8266 的数据,我做了一个到服务器的套接字连接。但这里的问题是我发送的数据被拒绝了。查看错误: pymysql.err.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行的 '0.0'、'2')' 附近使用的正确语法" )

这是我的 client.py 代码:

import socket
import machine
import network
from machine import Pin, ADC
import time, sys
from time import sleep
import esp
esp.osdebug(None)
import gc
gc.collect()

ip = 0

def conectar_wifi():

    global ip
    sta_if = network.WLAN(network.STA_IF)
    if not sta_if.isconnected():
        print('Conectando a la red...')
        sta_if.active(True)
        sta_if.connect('', '') 
        while not sta_if.isconnected():
            pass
    red = sta_if.ifconfig()
    ip = red[0]
    print('Configuracion de la red:', red[0:3])

conectar_wifi()
sensorph = ADC(0)
subirph = Pin(15, Pin.OUT, value= 0)
bajarph = Pin(14, Pin.OUT, value= 0)
flow = Pin(2, Pin.IN, Pin.PULL_UP)
led1 = Pin(4, Pin.OUT)
buzzer = Pin(16, Pin.OUT, value= 0)

count = 0
start_counter = 0
caudal = 0

def countPulse(p):
    global count
    global start_counter
    
    if start_counter == 1:
        count = count+1
        #flow = count / (60 * 7.5)

flow.irq(handler= countPulse, trigger= flow.IRQ_FALLING)

def phsensor():
    valor = sensorph.read ()
    tension = (valor * 3.3/1023)
    print ("Tension: ", tension)
    return tension

port = 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = socket.socket()
s.connect(("",port))

print('Puerto en', ip)


while True:
    ph=phsensor()
    start_counter = 1
    sleep (1)
    start_counter = 0
    caudal = (count * 60 * 2.25 / 1000)
    print("El caudal es: %.3f L/min" % (caudal))
    count = 0
    sleep (5)
    if caudal < 1:
        print("No esta llegando suficiente agua")
        led1.value(1)
    else:
        led1.value(0)
    if caudal > 2:
        print("El agua esta circulando bien")
    data=str(caudal).encode('utf-8')
    s.send(data)
    print(data)
    dataFromServer = s.recv(1024)

还有 server.py

import socket
import pymysql
from pymysql import cursors

connection = pymysql.connect(
    host="localhost",
    user="root",
    password="",
    db="prueba",
)

cursor = connection.cursor()


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


s.bind(("",8000))

s.listen()
print("Todo en orden rey")

 
while(True):

    clientConnected, clientAddress = s.accept()

    print(F"Se aceptó una solicitud de conexión de clientConnected:clientAddress")

    dataFromClient = clientConnected.recv(1024)

    databuena = dataFromClient.decode('utf-8')
    print(databuena)
    
    datos = str(dataFromClient)
    sql = "INSERT INTO roberto (nivelph, caudal) VALUES('"+datos+"', '2')"

    cursor.execute(sql)

    connection.commit()

    clientConnected.send("hola cliente".encode())

我看到错误给了我一个撇号,我删除了它,但它也不起作用。 database 它有西班牙文 phpmyadmin 并将其翻译成英文,以便更好地理解。

【问题讨论】:

可能很高兴知道名为 roberto 的表的架构。 @Martin 对不起,我觉得没必要,我马上上传 【参考方案1】:

由于您的架构是 (int, int),因此您需要提供两个整数,而不是字符串。在您的代码中,datos 是 dataFromClient 的字符串版本,所以我将使用非字符串版本。此外,“2”是硬编码的,它也应该是一个 int,或者只是 2。

sql = "INSERT INTO roberto (nivelph, caudal) VALUES(?, ?)"
cursor.execute(sql, [dataFromClient, 2])

【讨论】:

我把那个代码和我有这个错误:我应该把问号放在你放的地方,对吧? TypeError:字符串格式化期间并非所有参数都转换了

以上是关于错误 MySQL python。尝试使用传感器值字符串输入值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL、JSON、Python、Django - 完全错误

尝试使用用户输入删除时出现 Python 连接器错误

从 ADS1115 Python 向 MySQL 插入数据

尝试将 python 与 mysql 链接时出现错误

Arduino IMU 尝试:错误、滞后、漂移

MySQL 连接器/Python 存储过程插入未提交