上篇已经准备好了一个本地的PostgreSQL数据库,要实现用户饮食记录的展示和上传,就需要建立一张表,并实现flask读取以及写入数据库的操作。
首先新建立一张表,内含饮食记录所需要的各项属性:
CREATE TABLE ourfood(
ID INT,
NAME CHAR(10),
Time CHAR(20),
FoodPic CHAR(100),
FoodName CHAR(20),
FoodMaterial CHAR(50)
);
flask导入需要的头文件:
from flask import Flask, render_template, request, g
import psycopg2
然后是flask的后端接入数据库,接入函数如下:
def get_conn():
if "conn" not in g:
g.conn = psycopg2.connect(
database="postgres", user='postgres', password='123',
host='127.0.0.1', port='5432')
return g.conn
接收到上个函数的返回值后便成功连接到了数据库,也就可以操纵数据库的表格,先以插入数据的函数为例:
def insert_data(user_id, name, insert_time, food_pic, food_name, food_material): # 连接数据库并插入菜信息的数据库和sql函数
conn = get_conn()
cur = conn.cursor()
sql = "insert into ourfood (id,name,time,foodpic,foodname,foodmaterial) " \
"values ('{0}','{1}','{2}','{3}','{4}','{5}');".format(user_id, name, insert_time, food_pic, food_name, food_material)
print(sql)
cur.execute(sql)
conn.commit()
print('更新成功')
调用此函数时,仅需要传入相应的参数:
insert_data(user_ID, user_name, now_time, food_pic, food_name, food_material)
读取数据库的函数思路也是同理,使用时接收fetch all的返回值,是依据查询条件查到的一张二维列表:
def read_data(user_id):
conn = get_conn()
cur = conn.cursor()
sql = "select foodname, foodmaterial, time, foodpic from ourfood where id = '{0}'".format(user_id)
print(sql)
cur.execute(sql)
result = cur.fetchall()
conn.commit()
return result
调用读取数据函数时,接收返回值,便于后续传入前端来使用:
result = read_data(user_ID) # 读数据库并传到变量result内
综上,可以实现flask对数据库的读写操作,接下来就是与前端结合,显示地进行数据的操作。