sytnax问题

ldxq2e6h  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(245)

我有下面的代码,目的是提取一些传感器数据并插入到mysql数据库中。

def sendDataToDB(con, data, table):
    cur = con.cursor()
    cur.execute("INSERT INTO %s (`sensor_id`, `value`, `unit`, `datetime`) VALUES (%s, %s, %s, %s)", (table, data.uuid, data.value, data.unit, data.datetime))
    con.commit()

temperatureSens = TemperatureSensor(0, 'temperature', 'celsius')
con = connector.Connect(user = db_user_name, password = db_password, database = db_name, host = db_host, port = db_port)

temp = temperatureSens.extractData()
print(temp.uuid, temp.value, temp.unit, temp.datetime)
sendDataToDB(con, temp, 'temperature_data')

数据提取正确(这是print语句的目的),但是insert查询的语法有一个错误,我真的找不到。出现错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server version for
the right syntax to use near ''temperature_data' ('sensor_id', 'value', 'unit',
'datetime') VALUES (0, 23.0, '' at line 1

我确信问题出在python语法上(我和python语法不太相似),但我找不到它。
谢谢你的建议。
编辑**问题的根本原因是它在insert查询中被弄乱了(`)用(')签名。

soat7uwm

soat7uwm1#

正如Lukaszszozda所说,表名不能是参数,把表名看作变量,也需要添加 ' 包裹 %s ,所以改变

cur.execute("INSERT INTO %s (`sensor_id`, `value`, `unit`, `datetime`)
 VALUES (%s, %s, %s, %s)",
 (table, data.uuid, data.value, data.unit, data.datetime))

cur.execute("INSERT INTO youtable (`sensor_id`, `value`, `unit`, `datetime`) 
VALUES ('%s', '%s', '%s', '%s')",
(data.uuid, data.value, data.unit, data.datetime))
f0brbegy

f0brbegy2#

我也遇到过同样的问题,最后发现根本原因是:
datetime值应该是string->wrap by quote,如 "datetime_value" 或者 'datetime_value' 因此,您的代码应该:

cur.execute("INSERT INTO %s (`sensor_id`, `value`, `unit`, `datetime`) VALUES (%s, %s, %s, %s)", (table, data.uuid, data.value, data.unit, data.datetime))

日期时间值是什么 2019-01-02 15:08:59.490163 应更改为:

cur.execute("INSERT INTO %s (`sensor_id`, `value`, `unit`, `datetime`) VALUES (%s, %s, %s, '%s')", (table, data.uuid, data.value, data.unit, data.datetime))

日期时间值是什么 '2019-01-02 15:08:59.490163' 最好改为,对tablename使用backtick:

cur.execute("INSERT INTO `%s` (`sensor_id`, `value`, `unit`, `datetime`) VALUES (%s, %s, %s, '%s')", (table, data.uuid, data.value, data.unit, data.datetime))

相关问题