717|4

274

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

【DigiKey“智造万物,快乐不停”创意大赛】6-使用sqlite数据库保存数据 [复制链接]

 
在本例中会接收到下位机上传的温度数据,数据是上传到mqtt服务器的,通过订阅相关的消息,获得下位机的数据,不同的下位机使用不同的ID号,所以下位机上传的数据中包括ID号、温度,2个数据。需要将这些数据保存到数据库中。不同ID号的数据放在数据库的不同表中。
在前面的帖子中,已经能够通过python订阅到相关的mqtt消息了,现在需要使用python编写数据库的代码。而python内置了简单的数据库sqlite3,通过它可以快速的创建数据库。
连接/创建数据库
连接数据库,代码如下,这会在文件夹下创建一个db文件。
import sqlite3
from sqlite3 import Error
import datetime
db_name = "mydatabase.db"
def sql_connection():
    try:
        con = sqlite3.connect(db_name)
        return con
    except Error:
        print(Error)

 

关闭数据库
def sql_close(con):
    con.close()

 

向数据库中保存数据
数据是保存在表中的,这里打算是不同id上传的数据放在不同的表中。在创建新表之前要先检查是否已经有了这个表。
sqlite的语句中,可以使用占位符,但是表名好像不能用占位符,所以表名是通过格式化字符串放入到命令中的,而数据则是通过占位符添加进去的。代码如下,创建的表中包含3个数据:id、温度和时间。
def put_data_to_db(con,id,temperature):
    cursorObj = con.cursor()
    cmd = 'create table if not exists %s(id text, temperature real, time text)'%id
    cursorObj.execute(cmd)
    time = datetime.datetime.now()
    time = time.strftime('%Y-%m-%d %H:%M:%S')
    cmd = 'INSERT INTO %s VALUES (?,?,?)'%id
    cursorObj.execute(cmd,(id,temperature,time))
con.commit()
def save_temperature(id, temperature):
    con = sql_connection()
    put_data_to_db(con,id,temperature)
    sql_close(con)

 

获取表格中的数据
def get_data_number(con,id): #获取表格中数据的总数
    cursorObj = con.cursor()
    cmd = 'SELECT * FROM %s '%id
    cursorObj.execute(cmd)
    rows = cursorObj.fetchall()
    number = len(rows)
    return number
def get_id_temperature(con,id,index):#返回相应索引的数据,是个列表格式的
    number = get_data_number(con,id)
    if index > number:
        return []
    else:
        cursorObj = con.cursor()
        cmd = 'SELECT * FROM %s '%id
        cursorObj.execute(cmd)
        rows = cursorObj.fetchall()
        return rows[-1*index]

 

获取全部的表格
def get_all_id(con): #返回的列表格式的
    cursorObj = con.cursor()
    cursorObj.execute('SELECT name from sqlite_master where type= "table"')
    return cursorObj.fetchall()

 

测试代码
if __name__ == '__main__':
    save_temperature('T0001', 27)
    con =  sql_connection()
    get_data_number(con,'T0001')
    get_id_temperature(con,'T0001',4)
    a = get_all_id(con)
    print(a)
    sql_close(con)

 

通过上面的代码就能实现数据库数据的保存与读取了,接下来就是将mqtt订阅的数据通过json的解析,获得id和温度数据,然后保存的数据库中。
mydb.py (1.63 KB, 下载次数: 0)

最新回复

SQL的 select * from database1 我就会最基本的where and啥的   详情 回复 发表于 2023-12-31 22:21
点赞 关注
 
 

回复
举报

7159

帖子

2

TA的资源

版主

沙发
 

要用数据库,还是得花点时间学习一下数据库的语法。

点评

我这个应用比较简单,就用这些命令就够了  详情 回复 发表于 2024-1-1 16:40
 
 
 

回复

4908

帖子

12

TA的资源

版主

板凳
 

SQL的 select * from database1

我就会最基本的where and啥的

点评

我也是在网上现学的  详情 回复 发表于 2024-1-1 16:39
 
 
 

回复

274

帖子

8

TA的资源

纯净的硅(初级)

4
 
吾妻思萌 发表于 2023-12-31 22:21 SQL的 select * from database1 我就会最基本的where and啥的

我也是在网上现学的

 
 
 

回复

274

帖子

8

TA的资源

纯净的硅(初级)

5
 
wangerxian 发表于 2023-12-31 20:45 要用数据库,还是得花点时间学习一下数据库的语法。

我这个应用比较简单,就用这些命令就够了

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表