本篇blog将在智能魔镜规划(1)全体计划的基础上,完结对依据dragonboard 410c的智能魔镜的数据库的规划,首要咱们依据计划剖析,能够知道,在智能魔镜上需求坚持用户信息、坚持音讯信息,因而,根本能够构建一个用户表userInfo和一个音讯表pushInfo两个表就能够对整个智能魔镜的数据进行办理,能够便利的调用和存储相关的数据,详细的数据库规划计划如下:
上述两个表中,userInfo表用于存储体系中的用户信息,首要包含ownerID, 用户ID,Name,用户名,password 用户暗码,保存的是MD5暗码摘要信息,email,用户邮箱、phone 用户手机、haarValue,用户脸部特征值,pushInfo表为推送音讯表,体系中所有的推送音讯都被保存在该表中,其间infoID为音讯的ID,ownerID为音讯的具有者的ID,表明这条音讯是归于哪个用户的,体系将在后续依据这个值将音讯推送给该用户,pushID,推送者,表明这条音讯是由哪个用户推送过来的,体系依据该值辨认推送音讯的用户,infoType,音讯类型,该值为0或许1 ,位0的时分表明是一般的文本音讯,填写infoSubject和infoContent两个项目即可,为1的时分为视频或许音频音讯,此刻视频文件途径将被保存到filePath字段中,pushTIme,表明推送的时刻,infoValidityTIme表明的是音讯的有效期,istop表明音讯是否置顶,假如该值为1表明音讯置顶,将优先推送该音讯,viewWeight表明音讯的显现权值,显现完的音讯权值将削减为0不再显现。
依据上述规划,本文运用Python sqlite3 接口完结了创立该数据库的编码,详细代码如下:
import sqlite3
import os.path
import random
import TIme
#MagicMirrorDB = sqlite3.connect(./MaigicMirrorDB.db)
#MagicMirrorDB.execute()
#create userInfo
class MagicMirrorDB:
def __init__(self,dbPath):
self.DB=sqlite3.connect(dbPath)
self.cu=self.DB.cursor()
self.DB.execute()
#self.initTable()
#self.insertTestData(5,20)
def initTable(self):
try:
#create userInfo table
self.DB.execute(create table userInfo(userID integer primary key autoincrement,\
name nvarchar(50),\
password nvarchar(20),\
email nvarchar(50),\
phone nvarchar(50),\
haarValue nvarchar(50),\
avatarImg nvarchar(50))
)
#create pushInfo table
#********************pushInfo table**********************#
# infoType 0 text info, 1 video info
#
self.DB.execute(create table pushInfo(infoID integer primary key autoincrement,\
ownerID integer,\
pushID integer,\
infoType integer,\
infoSubject nvarchar(50),\
infoContent nvarchar(100),\
filePath nvarchar(1000),\
pushTIme float,\
infoValidityTime float,\
isTop integer,\
viewWeight integer\
))
# self.DB.execute(create table systemStatus(statusName nvarchar(30),statusValue integer,statusParam integer ,statusDiscirption nvarchar(50)))
except:
print(table is already create)
在上述代码中,咱们就能够经过在主函数中构建该类,完结对数据库的初始化,创立体系数据库,详细如下:
if __name__==__main__:
import sys
MMDB=MagicMirrorDB(./MagicMirrorDB.db)
print(MMDB.getUserAvatarImg(1))
result=MMDB.getUserVideoMessageList(1)
print(result)
result2=MMDB.getTextMessageList(1)
print(result2)
sys.exit(0)
这样,在规划其他模块之前,咱们就能够运转该脚本,完结数据库的创立,创立后,能够经过履行sqlite3指令检查数据库规划是否正确。
相同为了便利测验,在这里还构建了一个主动生成测验数据的函数,详细如下,经过履行该函数能够快速的生成测验信息填充数据库,就能够在后续规划模块的过程中使用这些数据进行测验。
def insertTestData(self,userInfo_n,pushInfo_n):
for userID in range(1,userInfo_n):
format=test%u
values=(userID)
userName=format % values
format=password_test%u
password=format % values
format=email_test%uqq.com
userEmail=format % values
format=phone_test%u
userPhone=format % values
format=haarValue_test%u
haarValues=format % values
avatar=(random.randint(1,8))
format=./avatarImg/headImg/ali1/%u.gif
avatarImg=format % avatar
format=insert into userInfo values(%u,%s,%s,%s,%s,%s,%s)
values=(userID,userName,password,userEmail,userPhone,haarValues,avatarImg)
insertSQL=format % values
#print(insertSQL)
self.cu.execute(insertSQL)
for infoID in range(1,pushInfo_n):
ownerID=random.randint(1,userInfo_n)
pushID=random.randint(1,userInfo_n)
infoType=random.randint(0,1)
isTop=random.randint(0,1)
viewWeight=random.randint(1,8)
format = infoSubject_pID:%u_wID:%u
values=(pushID,ownerID)
infoSubject=format % values
format = infoContent_pID:%u_wID:%u
values=(pushID,ownerID)
infoContent=format % values
filePath=
if infoType==1:
format=./messageFile/ownerID%u/pushID%u_%u.mp4
values=(ownerID,pushID,infoID)
filePath=format % values
else:
filePath=None
pushTime=time.time()
format=insert into pushInfo values(%u,%u,%u,%u,%s,%s,%s,%f,1.0,%u,%u)
values=(infoID,ownerID,pushID,infoType,infoSubject,infoContent,filePath,pushTime,isTop,viewWeight)
insertSQL=format % values
#print(insertSQL)
self.DB.execute(insertSQL)
以上便是整个智能魔镜的数据库的规划,后续将在该数据库的基础上,进一步完结和完善其他功能模块的规划。