当前位置:   article > 正文

flask-SQLAlchemy的使用(CRUD、触发器、迁移)_flask访问sqlite3实现crud代码

flask访问sqlite3实现crud代码

数据库的使用是任何程序开发不可缺少的一环,而在phython中,SQLAlchemy是最著名的ORM框架。在flask中,自然是flask-SQLAlchemy

以下介绍flask-SQLAlchemy配合sqlite数据库如何使用:

1. 基本用法(创建、CRUD)

首先在py文件中定义

# 1. 实例化并注册
app.config['SQLALCHEMY_DATABASE_URI'] = \
    'sqlite:///'+os.path.join(basedir,'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQlAlchemy(app)

# 2. 建立实体类映射到数据库
class Role(db.Model):
    __tablename__= 'roles'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String,nullable=True)
    # 设置关联其他表(User)
    users = db.relationship('User',backref='role')

class User(db.Model):
    __tablename = 'users'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String,nullable=True)
    # 设置外键关联role
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

而后创建数据库表
进入工程目录,在shell中:

#创建数据库
python manager.py shell
from app import db
from app import models
db.create_all()
from app.models import Role,User
    #添加数据
admins = Role(name='adminiatrators')
mod = Role(name='moderator')
db.session.add_all([amins,mod])
db.session.commit()
    #添加user关联role,这里的'role'是预先定义好的backref的值
jason = User(name='jason',role=admins)
db.session.add(jason)
db.session.commit()
    #修改数据
jason.password = '123'
db.session.add(jason)
db.session.commit()
    #删除数据
db.session.delete(jason)
db.commit()
    #读取数据
User.query.all()
User.query.get(1)
    #加条件查询
User.query.filter(id>0).all()
User.query.filter_by(name='jason').first()
  • 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

如果你使用的ide是pycharm,直接使用集成的数据库管理工具就可以方便的查看数据库内容:
这里写图片描述

2. 数据库触发器

比如有如下需求:在用户表插入新用户时自动给role字段赋值Guest

1.在实体类中增加静态触发方法
@staticmethod
def on_created(target,value,initiator):
    target.role = Role.query.filter_by(name='Guests').first()

2.添加监听器
db.event.listen(User.name,'append',User.on_created)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3. 数据库变更迁移

此处使用第三方库flask-migrate
迁移前的操作

from flask_migrate import Migrate,MigrateCommand
...
migrate = Migrate(app,db)
manager.add_command('db',MigrateCommand)

然后在命令行执行初始化操作
python manage.py db init
python manage.py db migrate -m 'Initial migration'

最后,将upgrade方法写入预设的deploy类,可以方便还原
@manage.command
def deploy():
    upgrade()
    #还可以执行一些初始化数据的脚本
    ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

需要迁移时,执行:

python manage.py deploy

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/521964
推荐阅读
相关标签
  

闽ICP备14008679号