Fork me on GitHub

模板,连接数据库及模型相关

前端的模板语法

继承

父级:

例子:

子级:

页面合并

for循环

if语句

宏定义

flask连接数据库

数据库实现+数据库驱动://用户名:密码@IP地址:端口/数据库

1
2
3
4
5
6
7
# 连接到sqlite
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sqlite3.db'


# 连接到mysql
 app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:root@127.0.0.1:3306/hzfl02'

实例化SQLAlchemy

1
2
3
4
5
6
7
db = SQLAlchemy()

db.init_app(app)

SQLALCHEMY_TRACK_MODIFYCATION = False 

app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:root@127.0.0.1:3306/hzfl02'

模型的定义

定义模型时需要在模型所在的文件导入实例化的SQLAlchemy

数据类型:

使用db.Column表示一列

约束条件:

index 索引

unique 唯一值

primary_key 主键

autoincrement 自增长

nullable 是否可以为空

default 默认值

定义完模型后需创建函数,执行db.create_all() 创建对应的数据表,db.drop_all() 为删除数据表

模型关系

一对多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Grade(db.Model):
    id = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True
    )
    name = db.Column(
        db.String(20),
        unique=True
    )
    stus = db.relationship(
        "Stu",
        backref="gradessss",
        lazy=True
    )

relationship 第一个参数是 一对多关系里“多”的那个类(Stu) 第二个参数是反向关系的名字backref一般是“一”的类的名字小写


class Stu(db.Model):
    id = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True
    )
    name = db.Column(
        db.String(20),
        unique=True
    )
    外键
    grade_id = db.Column(
        db.Integer,
        db.ForeignKey("grade.id")
    )

一对一

1
一对一关系与一对多类似,只需要在一对多关系中的一对应的类中添加属性 db.relationship(uselist=False) 其他的正常写

多对多

类一:

1
2
3
4
5
6
7
8
9
class Tag(db.Model):
    id = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True
    )
    title = db.Column(
        db.String(20)
    )

类二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Book(db.Model):
    id = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True
    )
    name = db.Column(
        db.String(20)
    )
    tags = db.relationship(
        "Tag",
        secondary=tags, # 指定中间表
        backref=db.backref("books", lazy=True), #相互的反向引用
        lazy=True
    )

在两个表中的任意一个表添加一个relationship,额外创建第三个表来维护多对多关系

1
2
3
4
5
6
tags = db.Table(
    "tags",
    db.Column("tag_id", db.Integer, db.ForeignKey("tag.id"),
    primary_key=True),
    db.Column("book_id", db.Integer, db.ForeignKey("book.id"), primary_key=True)
)