• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

flask创建数据库连接池

武飞扬头像
菜鸟小超
帮助1

学新通

flask创建数据库连接池

在Python中,您可以使用 Flask-SQLAlchemy 这个扩展来创建一个数据库连接池。Flask-SQLAlchemy 是一个用于 Flask 框架的 SQLAlchemy 操作封装,实现了 ORM(Object Relational Mapper)。ORM 主要用于将类与数据库中的表建立映射关系,使得我们可以非常方便地通过操作类来操作数据库。

以下是 SQLAlchemy 的一些关键特点:

  • ORM(Object-Relational Mapping):SQLAlchemy 提供了一套完整的 ORM 系统,它可以将数据库表映射为 Python 类,将表中的行映射为这些类的实例,将列映射为实例的属性。通过这种映射,你可以使用面向对象的方式操作数据库,而不必编写 SQL 语句。
  • 数据库抽象:SQLAlchemy 提供了一套数据库抽象层,它可以适应多种数据库系统,如 MySQL、PostgreSQL、SQLite 等。通过这个抽象层,你可以使用相同的 API 操作不同的数据库系统。
  • SQL 表达式语言:除了 ORM,SQLAlchemy 还提供了一套 SQL 表达式语言,你可以用它来编写 SQL 语句。这个表达式语言提供了比原生 SQL 更高级的抽象,可以更方便地编写复杂的 SQL 语句。
  • 连接池和事务管理:SQLAlchemy 提供了一套连接池和事务管理机制,你可以用它来管理和复用数据库连接,处理事务。

在许多 Python web 框架(如 Flask、Pyramid 等)中,SQLAlchemy 都是默认或推荐的数据库操作库。它提供了许多强大的功能,使得数据库操作变得非常方便和高效。

以下是一种创建 Flask-SQLAlchemy 连接池的方式:

  1. 安装 Flask-SQLAlchemy。如果您还没有安装,可以使用以下命令进行安装:
pip install Flask-SQLAlchemy
  1. 在你的 Flask 应用中设置 SQLAlchemy 的数据库 URI 和连接池的大小:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'
app.config['SQLALCHEMY_POOL_SIZE'] = 20
db = SQLAlchemy(app)

上述代码中 'mysql://username:password@localhost/db_name' 是你的数据库连接信息,你需要替换为实际的值。SQLALCHEMY_POOL_SIZE 是连接池的大小,你可以根据实际需要设置。

  1. 使用 db 对象进行数据库操作。例如,定义一个模型:
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 '<User %r>' % self.username
  1. 您可以使用 db.session 来进行数据库事务,如增删查改等:
user = User(username='test', email='test@example.com')
db.session.add(user)
db.session.commit()

这样就实现了一个 Flask 的 SQLAlchemy 数据库连接池。请注意,如果数据库是 PostgreSQL 或其他类型,需要更改 SQLALCHEMY_DATABASE_URI 中的 'mysql://' 部分。

User模型解释

上述代码中的 User 是一个 SQLAlchemy 的模型,它表示了一个数据库表。在这个例子中,这个表的名称默认是 “user”,并且它有三个字段:id,username 和 email。

  • class User(db.Model): 这一行定义了 User 类,该类继承自 db.Model,所以它具有 SQLAlchemy Model 的所有属性和方法。
  • id = db.Column(db.Integer, primary_key=True) 这一行定义了一个名为 “id” 的列。该列的类型是 Integer,并且它被设置为表的主键。
  • username = db.Column(db.String(80), unique=True, nullable=False) 这一行定义了一个名为 “username” 的列。该列的类型是 String,长度最大为80。unique=True 意味着这个表中的 “username” 必须是唯一的,nullable=False 意味着这个列不能为 NULL。
  • email = db.Column(db.String(120), unique=True, nullable=False) 这一行定义了一个名为 “email” 的列。这个列的类型是 String,长度最大为120。同样地,unique=Truenullable=False 分别表示这个列必须具有唯一值,并且不能为 NULL。
  • def __repr__(self): 这是一个魔法方法,当你尝试打印一个 User 对象时,Python 会调用这个方法。在这个例子中,它将返回一个字符串,如 <User 'username'>

这个 User 模型可以用来操作数据库中的用户表。例如,你可以使用这个模型来查询用户,添加新的用户,或者删除用户。

下面是一个删除用户的例子:

user = User.query.filter_by(username='test').first()  # 查询用户名为 'test' 的用户
if user:
    db.session.delete(user)  # 如果用户存在,就删除这个用户
    db.session.commit()  # 提交事务
  • user = User.query.filter_by(username='test').first():这行代码查询数据库中用户名为 ‘test’ 的用户。filter_by() 是一个过滤方法,它返回满足条件的结果。first() 是一个查询方法,它返回查询结果的第一项。如果查询结果为空,那么 first() 将返回 None
  • if user::这个判断语句检查查询结果是否为 None。如果 userNone,说明数据库中没有用户名为 ‘test’ 的用户,因此我们不能删除它。如果 user 不是 None,说明我们找到了一个用户名为 ‘test’ 的用户,因此我们可以删除它。
  • db.session.delete(user):这行代码删除查询到的用户。delete() 方法接受一个 SQLAlchemy 模型的实例作为参数,并将其标记为待删除。
  • db.session.commit():这行代码提交事务,将所有的改动(包括删除操作)保存到数据库。如果你没有调用 commit(),那么 delete() 的改动不会被保存到数据库。

请注意,如果你尝试删除一个不存在的对象,SQLAlchemy 会抛出一个异常。所以在删除之前,你应该检查你的对象是否存在。

补充

虽然这个User类代表了数据库中的一个表,但是并不意味着这个表已经在数据库中创建了。在你第一次操作这个表之前,你需要确保这个表已经在数据库中创建。你可以使用 db.create_all() 方法来自动创建所有的表,或者你也可以手动在数据库中创建这个表:

  1. 使用 db.create_all() 方法。这个方法会自动创建所有定义的但尚未在数据库中存在的表。这个方法通常在 Flask 应用启动时运行一次,例如:

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'
    db = SQLAlchemy(app)
    
    class User(db.Model):
        # ...
    
    db.create_all()
    
  2. 手动在数据库中创建这个表。你可以通过 SQL 语句或者数据库管理工具在数据库中创建这个表。

如果你尝试对一个在数据库中不存在的表进行操作(如查询、添加记录或删除记录),SQLAlchemy 会抛出一个错误。所以在操作表之前,你应该确保这个表已经在数据库中存在。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfifae
系列文章
更多 icon
同类精品
更多 icon
继续加载