You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python输出未显示在MySQL中,无法向temp-at-interrupt表插入数据

解决Python向MySQL插入温度数据失败的问题

嘿,作为刚接触Python和MySQL的初学者,遇到插入数据不显示的问题太正常啦!我帮你梳理几个最容易踩的坑,一步步排查就能解决你的两个问题——数据没在MySQL显示、无法插入数据。

1. 先确保数据库连接没问题

很多时候插入失败是因为连接参数错了,但你可能没察觉到。先给你的连接代码加上异常捕获,这样能明确知道哪里出问题:

try:
    conn = mysql.connector.connect(
        host='localhost',  # 改成你的MySQL主机,本地一般是localhost
        user='你的用户名',
        password='你的密码',
        database='你的数据库名'  # 要确保这个库存在且你有权限访问
    )
    cursor = conn.cursor()
    print("数据库连接成功!")
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("用户名或密码错啦!")
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print("对应的数据库不存在哦!")
    else:
        print(f"其他数据库错误:{err}")

2. 检查SQL插入语句的语法

你的表名是temp-at-interrupt,中间有横杠,MySQL会把它当成减法运算,这绝对会报错!还有TIME、DATE是MySQL的关键字,也需要用反引号包裹起来。正确的插入语句应该是这样:

# 注意表名和关键字字段的反引号
insert_query = """
INSERT INTO `temp-at-interrupt` (`TIME`, `DATE`, `TEMPERATURE`)
VALUES (%s, %s, %s)
"""

这里用%s做参数占位符,不要直接把变量拼进字符串里——既容易出错,还会有SQL注入风险。

3. 千万别忘了提交事务!

这是初学者最容易忽略的点!MySQL默认是关闭自动提交的,你执行完插入语句后,数据只是存在内存里,并没有真正写入数据库。必须调用conn.commit()才能把数据持久化:

# 执行插入语句后立刻提交
cursor.execute(insert_query, (current_time, current_date, temperature))
conn.commit()  # 这行绝对不能少!

如果插入过程中出错,还可以用conn.rollback()回滚,避免脏数据。

4. 确保数据类型和表结构匹配

你得先确认temp-at-interrupt表的字段类型:

  • 如果TIME字段是MySQL的TIME类型,那你传入的时间字符串得是HH:MM:SS格式;
  • DATE字段是DATE类型的话,字符串得是YYYY-MM-DD格式;
  • TEMPERATURE如果是数字类型(比如FLOAT或DECIMAL),要确保你传入的是float/int类型,不是字符串。

比如你用strftime('%H:%M:%S')生成时间,strftime('%Y-%m-%d')生成日期,就刚好匹配对应的字段类型。

5. 验证数据是否真的插入了

有时候不是没插入,而是你查询的时候找错了表或者数据库。插入后可以立刻查询最新的一条记录,确认是否成功:

cursor.execute("SELECT * FROM `temp-at-interrupt` ORDER BY `DATE` DESC, `TIME` DESC LIMIT 1")
latest_record = cursor.fetchone()
if latest_record:
    print("刚插入的数据已经在数据库里啦:", latest_record)
else:
    print("还是没找到数据,那得再检查前面的步骤哦")

完整的示例代码框架

把这些点整合起来,结合你的传感器读取逻辑,给你一个完整的参考(你只需要补全温度读取的部分就行):

import os
import time
import datetime
import glob
import mysql.connector
from mysql.connector import errorcode
from time import strftime

# 初始化传感器(你的原代码部分)
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'

# 补全你的温度读取函数
def read_temperature():
    # 这里写你读取DS18B20温度的逻辑,比如找到传感器文件、解析温度值
    # 示例返回一个温度值,你替换成自己的代码就行
    return 26.3

# 插入数据到数据库的函数
def insert_temp_to_db(temp):
    current_time = strftime('%H:%M:%S')
    current_date = strftime('%Y-%m-%d')
    conn = None
    try:
        # 连接数据库
        conn = mysql.connector.connect(
            host='localhost',
            user='你的用户名',
            password='你的密码',
            database='你的数据库名'
        )
        cursor = conn.cursor()
        
        # 插入语句
        insert_query = """
        INSERT INTO `temp-at-interrupt` (`TIME`, `DATE`, `TEMPERATURE`)
        VALUES (%s, %s, %s)
        """
        
        # 执行插入并提交
        cursor.execute(insert_query, (current_time, current_date, temp))
        conn.commit()
        print(f"成功插入:日期{current_date},时间{current_time},温度{temp}℃")
        
        # 验证插入结果
        cursor.execute("SELECT * FROM `temp-at-interrupt` ORDER BY `DATE` DESC, `TIME` DESC LIMIT 1")
        print("数据库最新记录:", cursor.fetchone())
        
    except mysql.connector.Error as err:
        print(f"出错啦:{err}")
        if conn:
            conn.rollback()  # 出错就回滚
    finally:
        # 不管成功失败,都要关闭连接
        if conn:
            cursor.close()
            conn.close()

# 主程序
if __name__ == "__main__":
    temp = read_temperature()
    insert_temp_to_db(temp)

按照这些步骤排查,应该就能解决你的问题啦!

内容的提问来源于stack exchange,提问作者Njord Nyström

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:34:02