【flask笔记4】

目录

一、定义数据模型

二、增删改操作

三、关系引用

四、查询操作

一、定义数据模型

1.常用SQLAlchemy列选项

选项名 说明
primary_key 表的主键
unique 值唯一
index 创建索引,提高查询效率
nullable 允许有空值
default 定义为默认值

2.常用SQLAlchemy关系选项

选项名 说明
backref 在关系的另一模型中添加反向引用
primary join 明确指定两个模型之间使用的联结条件
uselist 若为False,则使用标量值
order_by 指定关系中排列方式
secondary 指定多对多中排序方式
secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系中二级联结条件

 例:创建表 

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
#配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:[email protected]/flask_sql_demo'
#跟踪数据库修改--》不建议开启
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
db=SQLAlchemy(app)
'''
两张表
角色(管理员/普通用户)
用户ID
'''
#数据库模型需要继承db.Model
class Role(db.Model):
    #定义表名
    __tablename__='roles'
    #定义字段,db.column表示是一个字段
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)

class Users(db.Model):
    __tablename__='users'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)
    #db.ForeignKey('roles.id')表示是外键,表名.id
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    #删除表
    db.drop_all()
    #创建表
    db.create_all()
@app.route('/')
def hello_world():
    return 'Hello World!'
if __name__ == '__main__':
    app.run(debug=True)

二、增删改操作

1.Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理,会话用db.session表示,准备把数据写入数据库之前,先将数据添加到会话中,然后调用commit()方法提交会话,查询操作是通过query对象操作数据

1>db.session.add():添加到数据库的session中

2>db.session.add_all():添加多个信息到session中

3>db.session.commit():提交事务—数据库修改

4>db.session.rollback():数据库回滚操作

5>db.session.delect():删除数据库

2.添加管理员:

role=Role(name='admin')
db.session.add(role)
db.session.commit()

添加用户:

user=User(name='zs',role_id=role.id)
db.session.add(user)
db.session.commit()

3.修改信息:修改过后直接提交

user.name='xiaoming'
db.session.commit()

 4.删除操作:删除后直接提交

db.session.delect(user)
db.session.commit()

三、关系引用

1.利用relationship描述模型之间的关联,修改后的代码:

class Role(db.Model):
    #定义表名
    __tablename__='roles'
    #定义字段,db.column表示是一个字段
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)
    #在一的一方,写关联
    users=db.relationship('User',backref='role')#表示和User模型发生关联,增加一个users属性,不会在字段中出现

    #repr()方法显示一个可读字符串
    def __repr__(self):
        return '<Role: %s %s>' % (self.name,self.id)
class User(db.Model):
    __tablename__='users'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(16),unique=True)
    #db.ForeignKey('roles.id')表示是外键,表名.id
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    #User希望有role属性,但是属性的定义,需要在另一个模型中定义

    def __repr__(self):
        return '<User:%s %s>' % (self.name,self.id)

2.通过role来查询users

role.users

3.通过user来查询他的角色

user1.role

四、查询操作

 1.常见SQLAlchemy查询过滤器

 2.常见SQLAlchemy查询执行器

 3.操作:

1>查询所有用户数据

User.query.all()

2>查询有多少个用户

User.query.count()

3>查询id为4的用户

User.query.filter(User.id==4).first()

User.query.filter_by(id=4).first()

猜你喜欢

转载自blog.csdn.net/m0_70964767/article/details/126917483