Python中Flask-SQLAlchemy框架的使用

使用场景:刚开始接触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 以连接到数据库。

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

定义模型

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

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

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

创建数据库表

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

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

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

操作数据库

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

  •  查询数据

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

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

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

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

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

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

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

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

关系

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

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值