海鲜网站模板,网站建设开发步骤,城市分类信息网站系统,动漫网站建设意义SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具 一、SQLAIchemy的介绍二、数据库引擎1、支持的数据库1.1、sqlite数据库1.2、MySQL数据库1.3、数据库引擎的参数 三、定义模型类1、定义模型2、engine负责数据库迁移 四、alembic数据库迁移⼯具1、安装alembic2、初始化alemb… SQLAlchemy-2.0中模型定义和alembic的数据库迁移工具 一、SQLAIchemy的介绍二、数据库引擎1、支持的数据库1.1、sqlite数据库1.2、MySQL数据库1.3、数据库引擎的参数 三、定义模型类1、定义模型2、engine负责数据库迁移 四、alembic数据库迁移⼯具1、安装alembic2、初始化alembic环境3、修改配置和环境4、执⾏命令 一、SQLAIchemy的介绍
SQLAlchemy 是 Python 生态系统中最流行的 ORM。SQLAlchemy 设计非常优雅分为了两部分——底层的 Core 和上层的传统ORM。在 Python 乃至其他语言的大多数 ORM 中都没有实现很好的分层设计比如 django 的 ORM数据库链接和 ORM 本身完全混在一起。 SQLAlchemy 是 Python 中一个通过 ORM 操作数据库的框架。 SOLAIchemy对象关系映射器提供了一种方法用于将用户定义的Python类与数据库表相关联并将这些类(对象)的实例与其对应表中的行相关联。它包括一个透明地同步对象及其相关行之间状态的所有变化的系统称为工作单元以及根据用户定义的类及其定义的彼此之间的关系表达数据库查询的系统。
可以让我们使用类和对象的方式操作数据库从而从繁琐的 sql语句中解脱出来。 ORM 就是: Obiect Relational Mapper 的简写就是关系对象映射器的意思。 二、数据库引擎
任何SQLAlchemy应用程序的开始都是一个名为 Engine.此对象充当连接到特定数据库的中心源提供工厂和称为 connection pool对于这些数据库连接。引擎通常是一个只为特定数据库服务器创建一次的全局对象并使用一个URL字符串进行配置该字符串将描述如何连接到数据库主机或后端。 sqlalchemy使用create_engine()函数从URL生成一个数据库引擎对象。例如 enginecreate_engine(rsqlite:///C:\path\to\foo.db) 1、支持的数据库
URL通常可以包括⽤⼾名、密码、主机名、数据库名以及⽤于其他配置的可选关键字参数。主题格式 为
1.1、sqlite数据库
sqlite使⽤python内置模块连接到基于⽂件的数据库sqlite3 默认情况下。 1.2、MySQL数据库
mysql⽅⾔使⽤mysql python作为默认dbapi。mysql dbapis有很多包括pymysql和mysqlclient
from sqlalchemy import create_engineengine create_engine(mysqlpymysql://root:rootlocalhost:3306/test_db2?charsetutf8)1.3、数据库引擎的参数
echoFalse–如果为真引擎将记录所有语句以及repr()其参数列表的默认⽇志处理程序future --使⽤2.0样式Engine和Connection API。logging_name–将在“sqlalChemy.engine”记录器中⽣成的⽇志记录的“name”字段中使⽤的 字符串标识符。pool_size5 #连接池的⼤⼩默认为5个设置为0时表⽰连接⽆限制pool_recycle3600,#设置时间以限制数据库⾃动断开pool_timeout连接超时时间默认为30秒超过时间的连接都会连接失败。
三、定义模型类
这种模型类结构称为声明性映射它同时定义了 Python 对象模型以及描述的数据库元数据 在特定数据库中存在或将要存在的 真实 数据库 表。 映射从一个基类开始并且是 通心对类的继承来创建一个简单的子类。这里的父类是Base 模型类。
1、定义模型
# 定义一个模型类的基类
class Base(DeclarativeBase):# 所有的模型类都有的属性和字段映射create_time: Mapped[datetime] mapped_column(DateTime, insert_defaultfunc.now(), comment创建时间)update_time: Mapped[datetime] mapped_column(DateTime, insert_defaultfunc.now(), onupdatefunc.now(),comment更新时间)
import enum
from decimal import Decimalfrom sqlalchemy import String, DECIMAL, Boolean
from sqlalchemy.orm import Mapped, mapped_columnfrom ch04.db_main import Base, engineclass SexValue(enum.Enum):通过枚举可以给一些属性字段设置预设值MALE 男FEMALE 女class Employee(Base):员工的模型类__tablename__ t_empid: Mapped[int] mapped_column(primary_keyTrue, autoincrementTrue)name: Mapped[str] mapped_column(String(40), nameemp_name, uniqueTrue, nullableFalse) # 不允许为空# DECIMAL10总位数2小数点后位数sal: Mapped[Decimal] mapped_column(DECIMAL(10, 2), nullableTrue, comment员工的基本薪资)bonus: Mapped[int] mapped_column(default0, comment员工的津贴)is_leave: Mapped[bool] mapped_column(Boolean, defaultFalse, comment员工是否离职True表示离职False表示在职)gender: Mapped[SexValue]if __name__ __main__:# 数据库迁移# 创建表Base.metadata.create_all(engine)2、engine负责数据库迁移
# 所有的表都重新创建
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
# 单独把某个表创建⼀下
Employee.__table__.drop(engine)
Employee.__table__.create(engine)四、alembic数据库迁移⼯具
Alembic使⽤SQLAlchemy作为底层引擎为关系数据库提供变更脚本的创建、管理和调⽤。
1、安装alembic
pip install alembic2、初始化alembic环境
命令alembic init alembic
3、修改配置和环境 4、执⾏命令
# ⾃动⽣成迁移脚本
alembic revision --autogenerate -m init commit # 注意修改了orm之后修改-m后迁移脚
# 数据库迁移命令
alembic upgrade head查看数据库的版本号与versions中生成的版本号一致
• alembic upgrade head 将数据库升级到最新版本。 • alembic downgrade base 将数据库降级到最初版本。 • alembic upgrade 将数据库升级到指定版本。 • alembic downgrade 将数据库降级到指定版本。
演示版本降级