当前位置:   article > 正文

Flask开发之数据库(SQLAlchemy)的配置以及增删改查_flask蓝图如何设置数据库操作

flask蓝图如何设置数据库操作


前言:SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。


1.在Flask中配置SQLAlchemy

1 安装flask-sqlalchemy

pip install flask-sqlalchemy

2 安装flask-mysqldb

pip install flask-mysqldb

3 在代码中的配置:

class Config(object):
    """配置参数"""
    # sqlalchemy的配置参数
    SQLALCHEMY_DATABASE_URI = "mysql://root:root@127.0.0.1:3306/flask_demo"
    # 设置sqlalchemy自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 设置每次请求结束后会自动提交数据库中的改动
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO = True

app.config.from_object(Config)
db = SQLAlchemy(app)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.常用的SQLAlchemy字段类型

在这里插入图片描述

3.常用的SQLAlchemy列选项

在这里插入图片描述

4.常用的SQLAlchemy关系选项

在这里插入图片描述

5.在视图函数中定义模型类

注意:需要在命令行操作

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

class Config(object):
    """配置参数"""
    # sqlalchemy的配置参数
    SQLALCHEMY_DATABASE_URI = "mysql://root:root@127.0.0.1:3306/flask_demo"
    # 设置sqlalchemy自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 设置每次请求结束后会自动提交数据库中的改动
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO = True

app.config.from_object(Config)
db = SQLAlchemy(app)

# 定义数据库的模型
class Author(db.Model):
    """作者"""
    __tablename__ = "author"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    books = db.relationship("Book", backref="author")

class Book(db.Model):
    """书籍"""
    __tablename__ = "book"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    author_id = db.Column(db.Integer, db.ForeignKey("author.id"))

if __name__ == '__main__':
    db.drop_all() #第一次执行的时候操作
    db.create_all()#创建表
    # app.run(debug=True)

  • 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
  • 35
  • 36
  • 37
  • 38
  • 39

6.数据库的增删改查

1 常用的SQLAlchemy查询过滤器

在这里插入图片描述

2.常用的SQLAlchemy查询执行器

在这里插入图片描述

3 插入一条或者多条数据

def add_one():
    """添加单个数据"""
    user1 = Author(name="fly1")
    db.session.add(user1)
    db.session.commit()

    bk_user1 = Book(name='fly自传', author_id=user1.id)
    db.session.add(bk_user1)
    db.session.commit()

def add_many():
    """添加多个数据"""
    au_xi = Author(name='我吃西红柿')
    au_qian = Author(name='萧潜')
    au_san = Author(name='唐家三少')
    db.session.add_all([au_xi, au_qian, au_san])
    db.session.commit()

    bk_xi = Book(name='吞噬星空', author_id=au_xi.id)
    bk_xi2 = Book(name='寸芒', author_id=au_qian.id)
    bk_qian = Book(name='飘渺之旅', author_id=au_qian.id)
    bk_san = Book(name='冰火魔厨', author_id=au_san.id)
    db.session.add_all([bk_xi, bk_xi2, bk_qian, bk_san])
    db.session.commit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

4.删除数据

def delete():
    """删除数据"""
    author = Author.query.filter_by(name="唐家三少").first()
    db.session.delete(author)
    db.session.commit()
  • 1
  • 2
  • 3
  • 4
  • 5

5.修改数据

def update():
    """更新数据"""
    book = Book.query.filter_by(name="吞噬星空").first()
    book.name = '吞噬星空2'
    db.session.commit()

    Author.query.filter_by(name='zhang').update({'name': 'li'})
    pass
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

6.查询数据

def query():
    """查询数据"""
    # r1 = Book.query.all() #查询所有
    # r2 = Book.query.filter_by(name="吞噬星空").all() #根据条件查询
    r3 = Book.query.filter_by(name="吞噬星空").first()  # 根据条件查询 第一个
    # r4 = Book.query.first() #查询第一个
    # r5 = Book.query.filter(Author.name.endswith('g')).all() #模糊查询
    print(r3)
    print(type(r3))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

7.数据库迁移

在开发过程中,需要修改数据库模型,这样就可以使用Flask-Migrate来进行数据的迁移。

1 安装Flask-Migrate和flask_script

pip install flask-migrate

pip install flask_script

2 添加迁移代码

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Manager


app = Flask(__name__)

manager = Manager(app)

class Config(object):
    """配置参数"""
    # sqlalchemy的配置参数
    SQLALCHEMY_DATABASE_URI = "mysql://root:root@127.0.0.1:3306/flask_demo"
    # 设置sqlalchemy自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 设置每次请求结束后会自动提交数据库中的改动
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO = True

app.config.from_object(Config)
db = SQLAlchemy(app)

#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)

#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)

# 定义数据库的模型
class Author(db.Model):
    """作者"""
    __tablename__ = "author"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    books = db.relationship("Book", backref="author")

class Book(db.Model):
    """书籍"""
    __tablename__ = "book"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    author_id = db.Column(db.Integer, db.ForeignKey("author.id"))


if __name__ == '__main__':
    manager.run()
  • 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
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

3 创建迁移仓库

python app.py db init

4 创建迁移脚本

python app.py db migrate -m ‘initial migration’

5 更新数据库

python app.py db upgrade

6 回退数据库

python database.py db downgrade 版本号


结束!!!

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

闽ICP备14008679号