SQLAlchemy 是 Python 下非常好的 ORM 框架,支持使用 MySQL、PostgreSQL、SQLite 等主流数据库。Flask-SQLAlchemy 基于 SQLAlchemy 对 Flask 进行了适配,使其在 Flask 下的使用变得简单。
1. 建立模型
在建立模型之前,需要对客户需求进行分析。
假设现在需要实现一个简单的文章发布系统,用户可以在其中发布文章,管理员用户可管理(增、删、改、查)所有文章。此处可以将以上需求分解为“用户模块”与“文章模块”,然后为各个模板设计相应的模型。
如果需要实现基本的登录功能,则用户模型需要拥有“用户名”“密码”这些属性。用户还可以作为管理员,为了区分普通用户和管理员,用户模型还需要拥有“是否为管理员”属性。另外,如果需要创建文章,便需要使用“id”属性将用户模型与文章模型进行关联。
这里使用的是 SQLite 数据库,可视化工具为 sqlitestudio。
表 1 用户模型结构
模型属性 | Python 中数据类型 | 数据表中字段类型 | 说明 |
---|---|---|---|
id | int | INTEGER | 用于指向用户的唯一编号 |
username | str | VARCHAR | 用户名 |
password | str | VARCHAR | 密码 |
is_admin | bool | BOOLEAN | 是否为管理员 |
表2 文章模型结构
模型属性 | Python 中数据类型 | 数据表中字段类型 | 说明 |
---|---|---|---|
id | int | INTEGER | 用于指向文章的唯一编号 |
title | str | VARCHAR | 文章标题 |
content | str | VARCHAR | 文章正文内容 |
初始化 Flask-SQLAlchemy 并且定义用户模型和文章模型
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
from flask import Flask, render_template
from flask_script import Manager, Shell
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 设置数据库存储位置
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLCLCHEMY_TRACK_MODIFICATIONS'] = False
# flask_sqlalchemy 初始化代码
db = SQLAlchemy()
db.init_app(app)
manager = Manager(app)
@app.route('/', methods=['post'])
def login():
return "Hello World!"
# 定义用户模型
class UserModel(db.Model):
__tablename__ = 'user'
id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
username = db.Column(db.VARCHAR, unique=True)
password = db.Column(db.VARCHAR)
is_admin = db.Column(db.BOOLEAN, default=False, nullable=False)
# 定义文章模型
class ArticleModel(db.Model):
__tablename__ = 'article'
id = db.Column(db.INTEGER, primary_key=True)
title = db.Column(db