flask之 sqlalchemy 原生操作

一、sqlalchemy简介

SQLAlchemy 是一个强大的 Python 数据库工具集,它提供了一套完整的数据库访问方案。它通过多个层次来实现其功能,这些层次提供了灵活且强大的数据库操作能力。

1、SQLAlchemy底层组成

Engine(引擎)

  • 角色Engine 是 SQLAlchemy 的核心,通过它可以连接到数据库并执行 SQL 语句。
  • 功能:它是一个用于管理数据库连接的接口,并负责生成与数据库交互的Connection对象。
  • 创建:通常通过 create_engine() 函数来创建,使程序能够接入相应的数据库。

Connection Pooling(连接池)

  • 角色:连接池用于管理一组数据库连接以供重复使用。
  • 功能:通过复用已有的数据库连接,减少连接开销,提高应用的性能和效率。
  • 实现:SQLAlchemy 提供了一些连接池实现,如 QueuePool(默认)、SingletonThreadPool 等,用户可以通过配置参数进行定制。

Dialect(方言)

  • 角色:Dialect 用于处理不同数据库之间的特定差异。

  • 功能:它管理与特定数据库的通信,决定如何执行 SQL、翻译 SQL 为数据库特定的语言、处理特定的数据类型和连接设置。

  • 支持:SQLAlchemy 支持多种数据库方言,包括 SQLite、MySQL、PostgreSQL、Oracle、SQL Server 等。选择方言通过在连接字符串中指定合适的数据库驱动:

  • 如 "mysql+pymysql://user:password@host/db"

Schema/Types(架构和类型)

  • 角色:Schema/Types 层次定义数据库表的结构和列的数据类型。
  • 功能:它用于映射 Python 对象到数据库表,并支持定义和操作数据库的结构。
  • 组件:包括 TableColumn 等元素,以及丰富的内置数据类型如 IntegerStringDateTime,也允许自定义数据类型。

SQL Expression Language(SQL 表达式语言)

  • 角色:提供了一个灵活的 SQL 构建器,使得可以用 Python 对象来构建 SQL 语句。

  • 功能:它是一个抽象层,允许开发者通过 Python 的语法来构建复杂的 SQL 查询,而不需要手写 SQL。

  • 使用:用户可以通过表达式构建器来拼凑 SQL 语句,然后交给引擎执行。例如:

  • from sqlalchemy import select
  • stmt = select([users_table]).where(users_table.c.id == 42)
  • result = connection.execute(stmt)

SQLAlchemy 的分层结构通过 Engine 连接数据库、使用 Connection Pooling 管理连接、依赖 Dialect 处理数据库差异、通过 Schema/Types 进行数据库建模,并使用 SQL Expression Language 构建和执行表达式。这种设计使 SQLAlchemy 成为功能丰富且灵活的数据库访问工具,适用于广泛的开发需求。

2、官网

https://docs.sqlalchemy.org/en/20/

3、orm操作表的能力

SQLAlchemy

  • 不支持创建数据库:SQLAlchemy 本身不能创建数据库,库在使用 SQLAlchemy 之前需要存在。
  • 创建和删除表:可以通过 ORM 的 Base.metadata.create_all() 和 Base.metadata.drop_all() 方法来创建和删除数据库表。
  • 修改表结构:SQLAlchemy 不原生支持数据库表结构的变更(如添加或删除列)。需要使用 Alembic,这是一个用于处理 SQLAlchemy 数据库迁移的独立工具。在 Flask 中,通常通过 Flask-Migrate 插件来实现,它是 Alembic 的一个集成。

Django ORM

  • 创建数据库:Django 本身不支持直接创建数据库,通常需要手动创建,但可配置数据库参数以便进行其他操作。
  • 创建、删除表和修改结构:Django 管理表结构的改变是通过迁移来完成的,包括添加和删除列。makemigrations 和 migrate 命令实现了这部分功能。因此,Django 实际上是可以添加和删除字段的。

完整性和集成性

  • 独立使用和集成:SQLAlchemy 和 Django ORM 都可以作为独立模块使用,也可以集成到 Web 项目中。
    • Flask:SQLAlchemy 常与 Flask 结合使用,通过 Flask-SQLAlchemy 扩展,使其更便于在 Flask 应用中使用。
    • FastAPI:FastAPI 通常结合 SQLAlchemy 使用,利用其异步支持来实现高效的数据库访问。

二、sqlalchemy原生操作

1、基本的使用步骤

导入模块、创建engine对象、获得游标、执行sql操作

# 1  导入
from sqlalchemy import create_engine
import pymysql

# 2 创建engine对象
engine = create_engine(
    "mysql+pymysql://root:bigdata@192.168.1.241:3306/monitor",
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
    pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)

# 3 通过engine获得conn,cursor
conn = engine.raw_connection()  # 拿到连接对象
cursor = conn.cursor(pymysql.cursors.DictCursor)

# 4 具体操作
cursor.execute('select * from alarm_record limit 10')
print(cursor.fetchall())
cursor.close()
conn.close()

 

 

三、

posted @ 2024-11-15 18:06  凡人半睁眼  阅读(13)  评论(0编辑  收藏  举报