之前都是在本地数据库进行简单的数据读写操作,进一步升华数据的操作便是连接操作远程库了。本文就简单描述连接远程数据库并配合分页展示数据、普通上传数据的过程。
之前的分页功能,需要class映射一张表,内部数据即可自动分页。但一般数据库select的结果是二维list,无法复用分页功能。这一点造成了较大困扰,大约经历如下方案后得以解决:
1.映射数据库多个表到多个class内,自主筛选。结果一旦经历筛选,就变成了list,无法保持class,最终放弃。
2.联系数据库同学,提供根据用户ID筛选后,结果建立表,表名用ID命名,便于映射。方案成功。
接下来就成功经验加以记录。
首先是连接远程数据库,实际远程连接语句包含密码,不予展现;仅说明模式,语句和之前本地一样,改改关键字符就可以实现:
# 数据库配置 mysql://username:password@hostname/database
数据库同学提供查询数据并建立表,供我进行映射使用。
具体数据库函数代码涉及密码,不作呈现。
仅在我的py文件内引入,传入ID使用删除、建立table的函数,之后便可以进行映射了:
import backinform
backinform.deletetable(ID)
backinform.createtable(ID)
然后和上上篇一样的流程,建立好与数据库内上步新建好的表相对应的class:
# 食谱表的实体类
class Food_inform(db.Model):
# 定义表名
__tablename__ = 'food_{0}'.format(ID)
# 定义列
food_id = db.Column(db.CHAR(10), primary_key=True)
food_name = db.Column(db.CHAR(20))
food_infor = db.Column(db.CHAR(100))
url = db.Column(db.CHAR(100))
time = db.Column(db.CHAR(20))
def __init__(self, food_id, food_name, food_infor, url, time):
self.food_id = food_id
self.food_name = food_name
self.food_infor = food_infor
self.url = url
self.time = time
def __repr__(self):
return '<{},{},{},{},{}>'.format(self.food_id, self.food_name, self.food_infor, self.url, self.time)
之后映射成功的class就可以套入分页模式(和上上篇一样),成功分页了。
连接远程数据库下的select信息+分页效果如下:
有关上传文件,也是传入ID,调用数据库同学的函数得以实现。相比原来只是替换了函数,转变远程比较简单:
backinform.insert_food(user_ID, food_pic, food_material, food_name, now_time)
至此,大的难点便都解决了。余下事宜还有:对接饮食识别,调整样式等。