python - 如何通过 Python 将列表插入 MySQL?
问题描述
我正在尝试通过 USB 从 Arduino 获取传感器数据到 RPi,用 Python 读取它并将其插入 MySQL 数据库。即使我尝试插入的数据类型显然是字符串,我也会收到以下错误:
“TypeError:必须是字符串或只读缓冲区,而不是元组”
我试图实现的数据库通常有 6 个浮点数,最后有 1 个 int 类型值,但根据其他来源,他们说无论类型应该是什么,数据都应该作为字符串发送。那么我能做些什么来解决这个问题呢?
我的数据库:
+------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| humidity | float | YES | | NULL | |
| temperatur | float | YES | | NULL | |
| lightlevel | float | YES | | NULL | |
| airquality | float | YES | | NULL | |
| lpg | float | YES | | NULL | |
| gas | float | YES | | NULL | |
| pir | int(11) | YES | | NULL | |
+------------+---------+------+-----+---------+-------+
这是我的代码:
import serial
import mysql.connector
import MySQLdb
db = MySQLdb.connect(host = "localhost", user="root", passwd = "password", db = "sensordata")
cur = db.cursor()
ser = serial.Serial('/dev/ttyACM0',9600)
while 1:
serread = ser.readline()
a_list = serread.split()
map_object = map(float, a_list)
list_of_integers = list(map_object)
sql = ("""INSERT INTO datas VALUES (%s,%s,%s,%s,%s,%s,%s)""", (str(list_of_integers[0]), str(list_of_integers[1]), str(list_of_integers[2]), str(list_of_integers[3]), str(list_of_integers[4]), str(list_of_integers[5]), str(list_of_integers[6])))
cur.execute(sql)
db.commit()
print(list_of_integers)
# print(type(str(list_of_integers[0])))
谢谢你。
解决方案
您收到该错误是因为在以下行中您以注释而不是字符串的形式编写了 mysql 命令:
sql = ("""INSERT INTO datas VALUES (%s,%s,%s,%s,%s,%s,%s)""", (str(list_of_integers[0]), str(list_of_integers[1]), str(list_of_integers[2]), str(list_of_integers[3]), str(list_of_integers[4]), str(list_of_integers[5]), str(list_of_integers[6])))
尝试改用这一行:
sql = ("INSERT INTO datas VALUES (%s,%s,%s,%s,%s,%s,%s)", (str(list_of_integers[0]), str(list_of_integers[1]), str(list_of_integers[2]), str(list_of_integers[3]), str(list_of_integers[4]), str(list_of_integers[5]), str(list_of_integers[6])))
推荐阅读
- flutter - 成功提交后flutter sqflite事务不插入记录
- c++ - 具有非常量大小的OpenGL顶点缓冲区
- angular8 - 材料表上的Angular 8分页和排序不起作用
- python - keras 验证精度和人工评估精度的巨大差异。(Python3 Keras)
- google-sheets - 在具有多个条件的 Google 表格中减去值
- sql - Oracle中length()和60-length()函数的区别
- python - 在python中使用递归函数效率低吗?
- java - 将android按钮与屏幕中心对齐
- r - 使用已经存在的 NA 条目附加 data.tables
- ios - 尽管服务器报告 200,APNS 推送仍未到达