FLASK数据库模型

SQLAlchemy 是一个基于 Python 实现的 ORM 库 , 是一种 面对对象 的数据库编程框架 (关系对象映射) 。
快速入门文档
安装
pip install sqlalchemy在 Flask 项目中的 URI 配置
class Config:SECRET_KEY ="abc_caonima_wocao" # 随机 SECRET_KEYSQLALCHEMY_COMMIT_ON_TEARDOWN = True # 自动提交SQLALCHEMY_TRACK_MODIFICATIONS = True # 自动sqlDEBUG = True # debug模式SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://%s:%s@%s:%s/%s' % (DB_USERNAME, DB_PASSWORD,DB_HOST, DB_PORT, DB_NAME) #数据库URL在初始化项目中连接
app = Flask(__name__,template_folder='templates',static_folder='static')app.config.from_object(Config)db = SQLAlchemy(app)db.init_app(app)这样就把 数据库 和 Flask实例联系起来了 , 这里使用 Mysql
建立数据库模型
所谓数据库模型 , 说白了就是建立数据库中所需的具体字段 , 包括字段名称 , 类型 , 限制条件等等
比如在个人博客中 , 我们需要有文章列表 , 也需要有文章详情的数据库模型 。
编写模型对象
class Article(db.Model):__tablename__ = 'article'id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(32))author = db.Column(db.String(32))img_url = db.Column(db.Text, able=False)content = db.Column(db.Text, able=False)tag = db.Column(db.String(64), able=True)uuid = db.Column(db.Text, able=False)create_time = db.Column(db.DateTime, able=True, default=datetime.now)uid = db.relationship('Article_Detail', backref='article')def __repr__(self):return '' % self.title这样就实现了文章的数据库所需字段
id:数据库id , 主键
title:文章标题 , 字符类型 , 后面声明长度
【FLASK数据库模型】author:作者 , 字符类型
img_url:图片 , text类型
content:文章简介
tag:所属标签
uuid:文章唯一标识id
create_time:创建时间 , detatime类型
uid:反向代理 , 通过关联的名称表可以得到 article表中的属性
Article_Detail模型
class Article_Detail(db.Model):__tablename__ = 'article_detail'id = db.Column(db.Integer, primary_key=True)d_content=db.Column(db.Text,able=False)uid = db.Column(db.Integer, db.ForeignKey('article.id'))def __repr__(self):return '' % self.titleid:数据库id , 主键
d_content:详情文章内容 , 文本类型
uid:外键 , 关联到 article 表 id
通过 relationship 和 ForeignKey 把文章和文章详情表联系起来 , 在编写文章详情的时候 , 通过 uid 选择是哪一篇文章的详情即可 。
对于个人博客而言 , 模型的关联并没有很复杂 , 一般是 一对多 的操作就可以搞定 , 当然如果是论坛或者社区的话 , 会用到 多对一 和 多对多 的数据库操作, 不做详细介绍 。
增删改查
SQLAlchemy 之所以这么流行 , 在 Flask 中地位如此之高 , 基于它是面对对象的数据库编程 。
所以 , 对于数据查询 , 添加等操作也是非常的简单 。
查询文章列表:
@home.route('/')def index:init_list= Article.query.order_by(db.desc(Article.create_time)).allreturn render_template('home/index.html', datas=init_list)可以看到 , 查询所有文章的语句 , 这里是按照创建的时间排序的 , 注意到desc(Article.create_time) , 然后将所得列表传给前端页面 , 渲染完成 。
再来看看根据 id 查询文章详情内容的路由实现:


推荐阅读