当前位置:   article > 正文

Python中Flask-SQLAlchemy框架的使用_sqlalchemy与pydantic结合教程

sqlalchemy与pydantic结合教程

使用场景:刚开始接触flask框架时,每次访问数据库都创建一个新的数据库连接。而在Flask应用中,通常更好的做法是使用应用上下文(application context)来管理数据库连接,例如使用Flask-SQLAlchemy这样的扩展来自动管理连接的生命周期。即:数据库连接重用

Flask-SQLAlchemy 是一个 Flask 扩展,它为 Flask 应用提供了对 SQLAlchemy 的集成支持,使得在 Flask 应用中操作数据库变得非常简单。SQLAlchemy 是一个强大的 Python ORM(对象关系映射)框架,它允许开发者使用 Python 类和对象来操作数据库,而无需编写繁琐的 SQL 语句。

具体使用方法如下

安装 Flask-SQLAlchemy

使用 pip 安装Flask-SQLAlchemy:

pip install Flask-SQLAlchemy


配置 Flask-SQLAlchemy

在Flask 应用中,需要配置 Flask-SQLAlchemy 以连接到数据库。

  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. app = Flask(__name__)
  4. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db' # 使用 SQLite 数据库,你可以替换为其他数据库 URI
  5. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭对模型修改的追踪以提高性能
  6. db = SQLAlchemy(app)

定义模型

使用 Flask-SQLAlchemy,你可以定义 Python 类来表示数据库中的表。每个类都继承自 db.Model,并且使用 SQLAlchemy 提供的字段类型来定义表的列。

  1. class User(db.Model):
  2. id = db.Column(db.Integer, primary_key=True)
  3. username = db.Column(db.String(80), unique=True, nullable=False)
  4. email = db.Column(db.String(120), unique=True, nullable=False)
  5. def __repr__(self):
  6. return f'<User {self.username}>'

在这个例子中,定义了一个 User 模型,它有三个字段:id(主键),username(唯一且不可为空),和 email(唯一且不可为空)。

创建数据库表

在 Flask 应用启动时,可以使用 db.create_all() 方法来创建所有定义的模型对应的数据库表。

  1. if __name__ == '__main__':
  2. with app.app_context():
  3. db.create_all()
  4. app.run(debug=True)

使用 with app.app_context(): 来确保在没有请求的情况下也能正确创建数据库表。

操作数据库

Flask-SQLAlchemy 提供了丰富的 API 来查询、添加、更新和删除数据库中的数据。

  •  查询数据

可以使用模型的 query 属性来执行查询操作。

  1. users = User.query.all() # 获取所有用户
  2. user = User.query.get(1) # 根据 ID 获取单个用户
  3. user = User.query.filter_by(username='admin').first() # 根据条件获取单个用户
  • 添加数据

可以创建模型类的实例,并使用 db.session.add() 方法将其添加到会话中,然后调用 db.session.commit() 方法来提交事务,将数据保存到数据库中。

  1. new_user = User(username='newuser', email='newuser@example.com')
  2. db.session.add(new_user)
  3. db.session.commit()
  • 更新数据

可以修改模型实例的属性,然后调用 db.session.commit() 来提交更改。

  1. user = User.query.get(1)
  2. user.username = 'updated_username'
  3. db.session.commit()
  • 删除数据

可以使用 db.session.delete() 方法来删除一个模型实例。

  1. user = User.query.get(1)
  2. db.session.delete(user)
  3. db.session.commit()

关系

Flask-SQLAlchemy 支持定义模型之间的关系,如一对一、一对多、多对多等,通过定义外键和关系属性来实现。

  1. class Post(db.Model):
  2. id = db.Column(db.Integer, primary_key=True)
  3. title = db.Column(db.String(100), nullable=False)
  4. author_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
  5. author = db.relationship("User", back_populates="posts")
  6. class User(db.Model):
  7. id = db.Column(db.Integer, primary_key=True)
  8. username = db.Column(db.String(80

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号