flask数据库

flask-SQLAlchemy 是一个为flask应用增加SQLAlchemy支持的扩展。

在python扩展库中其实包含了SQLAlchemy。在版本的不断叠加后,已经被整合到flask架构中,flask-SQLAlchemy简化在Flask中SQLAlchemy的使用,提供了有用的默认值和额外的助手来更简单地完成常见任务。

创建db

SQLAlchemy 需要的 Base, engine, session 都被整合到了一起,用 SQLAlchemy 类实现,该类实例需要传入 Flask 对象,并利用 app.config[‘SQLALCHEMY_DATABASE_URI’] 来赋值 database 的 URI

1
2
3
4
5
6
7
8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/study?charset=utf8mb4'
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI

db = SQLAlchemy(app)

通过 db 可以获取:基类db.Model,Session db.session,引擎 db.engine

映射类

在构造映射类的时候,需要继承的基类由 db.Model 来实现

1
2
3
4
5
6
7
8
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Interval, primary_key=True)
name = db.Column(db.String(64), unique=True, nullable=False)
password = db.Column(db.String(64), unique=True, nullable=False)

def format(self):
return dict(id=self.id, name=self.name, password=self.password)

数据库操作

在数据库操作部分,与直接使用SQLAlchemy没有什么不同,但是在查询方面,除了可以使用session.query(User)的方式查询,还可以使用User.query的方式查询,这样书写会更方便。

创建/删除所有表

1
2
db.create_all()    # 创建
db.drop_all() # 删除

插入行

插入单行

1
2
db.session.add(User(id=1, name="admin", password="password"))
db.session.commit()

插入多行

1
2
db.session.add_all[(User(id=1, name="admin", password="password"), User(id=2, name="user1", password="password1")])
db.session.commit()

更新行

更新行时先查询出要更新的行数据,再进行修改更新

1
2
3
admin = User.query.filter_by(name="admin").first()
admin.name = "Administrator"
db.session.commit()

删除行

删除行时要先查询出要删除的更新,再进行删除

1
2
3
admin = User.query.filter_by(name="admin").first()
db.session.delete(admin)
db.session.commit()

查询

  • 查询表中数据(select *)

    1
    2
    User.query.first()  # 查询表中第一条数据,返回映射类的对象
    User.query.all() # 查询表中所有数据,返回一个映射类的对象的列表
  • 按照一个条件过滤数据(where)

    1
    2
    User.query.filter_by(name="admin").first()  # 指定条件查询
    User.query.filter_by(name="admin").all()
  • 按照两个条件过滤数据记录(where and)

    1
    2
    User.query.filter_by(name="admin", id=1).first()  # 指定条件查询
    User.query.filter_by(name="admin", id=1).all()
  • 排序查询(order by)

    1
    2
    User.query.order_by(User.id).all()
    User.query.order_by(User.id.desc()).all() # 降序排序,默认是升序排序
  • 多表查询(join)

    1
    User.query.filter_by(id=1).join(Environments,Variable.env_id == Environments.id).first()
  • 分组查询(group by)

    1
    User.query.group_by(User.id).all()
  • 分页查询(limit)

    1
    2
    3
    User.query.limit(1).all()
    User.query.limit(1).offset(2).all()
    User.query.filter_by(id=3).limit(1).offset(1).all()

执行原生sql

1
2
sql = 'update user set name = :name where id = :id'
results = db.session.execute(sql, {"name":"admin","id": 1})
文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2020/03/08/flask/flask数据库/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog