【Python】ORM 持久层框架 SQLAlchemy 的基本使用

Python 数据持久层ORM框架 TorToise模块(异步) Tortoise ORM,一个功能强大的异步ORM框架,简化了数据库操作,使开发者能通过Python类定义和管理数据库结构。其支持多种数据库后端,并提供直观易用的API进行高效的数据访问。无论是初学者还是资深开发者,Tortoise ORM都能助力构建稳健、高效的数据库应用。 阅读详情
AI摘要

本文详细介绍了如何在Python中使用SQLAlchemyORM进行数据库操作,包括连接数据库、创建表、CRUD操作以及ORM映射,对比了与Mybatis的相似之处。适合初学者理解和实践。

Python SQLAlchemy ORM框架的使用

前言

作为从隔壁Java村来的Python小白,接触Python后,就像乡下人进城了一样——新奇!今年年初接了一个用Python Scrapy + FastAPI 重构原本 Java 写的爬虫网页分析逻辑。那到管道数据持久层的一步时,不能直接存储,而是要先查询,比对数据,再进行存储,而一些简单的Python连接数据库操作我始终觉得太像JDBC,每次都要这样连,似乎会重复工作量。如果能有像Mybatis一样的ORM框架就好了。

果然,搜了一圈发现了一位宝藏up主跟峰哥学编程的教程:SQLAlchemy ORM框架的使用

学习目标

  • 学习SQLAlchemy的基本使用

准备工作
准备一个python项目,这里我准备的是FastAPI项目,在requirements.txt加入各依赖:

mysqlclient==2.1.1
SQLAlchemy==2.0.23

或者 pip install 也可以。

准备好环境后,下面我们开始!

1. 数据库操作

1.1 连接数据库

SQLAlchemy+mysqldb 连接数据库,示例代码如下:

# 所需依赖
import sqlalchemy

# 创建引擎
engine = sqlalchemy.create_engine('<数据库类型>://<用户名>:<密码>@<地址>:<端口号>/<数据库名>?[编码方式]')
# 创建连接
connect = engine.connect()

# 示例查询
query = sqlalchemy.text('SELECT id, user_name, create_time, update_time FROM kcl_user')
# 返回的是值的集合
result_set = connect.execute(query)

for row in result_set:
    print(row)

# 关闭连接
connect.close()

其中,具体创建引擎应该参考上述代码改为自己实际的,我这里的示例做了描述,< >代表必填,[ ]代表可选项,例如连接本地的是:

engine = sqlalchemy.create_engine('mysql://root:123456@<地址>:<端口号>/<数据库名>?[编码方式]')

2.2 SQLAlchemy创建表

创建表的需求在一些爬虫需求里比较常见。以下演示如何创建表:

# 暂存元数据
meta_data = sqlalchemy.MetaData()

# 创建表
subject = sqlalchemy.Table(

    'subject',meta_data,
    sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column('name', sqlalchemy.String(255), unique=True, nullable=False),
    sqlalchemy.Column('score', sqlalchemy.Integer, unique=False),
)

meta_data.create_all(engine)

其中,nullable 标识是否为空,false表示不可以,unique表示是否唯一,ture表示是。
而且,我们在实际使用的时候可以大胆执行meta_data.create_all(engine)方法,若该表存在,则不会覆盖掉它,哪怕字段变更了。

2.3 SQLAlchemy CRUD

这一小节我们来学习SQLAlchemy的一些CRUD基本操作。用我们上一小节刚刚创建的表做示例

2.3.1 新增

若读者有Python或Java等编程语言基础+SQL基础,那么基础的CRUD就很好理解了,我们只需要直接通过示例代码了解SQLAlchemy提供了何种方法,如何传参,如何提交即可:

新增单个

# 创建引擎
engine = sqlalchemy.create_engine('mysql://root:root@localhost:3306/kcl2024?charset=utf8', echo=True)

# 暂存元数据
meta_data = sqlalchemy.MetaData()

# 创建表
subject = sqlalchemy.Table(

    'subject',meta_data,
    sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column('name', sqlalchemy.String(255), unique=True, nullable=True),
    sqlalchemy.Column('score', sqlalchemy.Integer, unique=False),
    sqlalchemy.Column('create_time', sqlalchemy.DateTime, unique=False),
)

meta_data.create_all(engine)

# 新增单个
insert_single = subject.insert().values(name='数学', score=100, create_time='2021-01-01 00:00:00')

with engine.connect() as connection:
    result = connection.execute(insert_single)
    print(result.inserted_primary_key)
    # 事务提交
    connection.commit()

批量新增
批量新增需要在execute带上.insert(),和一个字典列表:

# 新增多个
dict_list = [
    {'name': '体育', 'score': 100},
    {'name': '英语', 'score': 100},
    {'name': '物理', 'score': 100},
    {'name': '化学', 'score': 100},
    {'name': '生物', 'score': 100},
    {'name': '政治', 'score': 100},
]

with engine.connect() as connection:
    result_multi = connection.execute(subject.insert(), dict_list)
    # 事务提交
    connection.commit()

2.3.2 查询

示例:

with engine.connect() as conn:
    # 查询数据
    query = subject.select().where(subject.c.name == '语文')
    result = conn.execute(query)
    print(f'result_set={result.fetchall()}')
    # 关闭连接
    conn.close()

其中, 上面的.c表示column

其它条件
where里如果我们要加or、and等条件,需要额外引入sqlalchmy的对应方法,例如:

with engine.connect() as conn:
    # 查询数据
    query = subject.select().where(
        or_(subject.c.name == '数学',subject.c.name == '语文'),
        and_(subject.c.score > 60, subject.c.score <= 100)
    )
    result = conn.execute(query)
    print(f'result_set={result.fetchall()}')
    # 关闭连接
    conn.close()

2.3.3 删除

有了上面的基础,我们学习删除和修改将会快很多,直接上示例:

# 删除数据
conn.execute(subject.delete().where(subject.c.name == '语文'))
    query = subject.select()
    result = conn.execute(query)
    print(f'result_set={result.fetchall()}')

2.3.4 修改

示例:

# 更新数据
    conn.execute(subject.update().where(subject.c.id == 1).values(name='书法', score=99))

    query = subject.select().where(
        id == 1,
    )
    result = conn.execute(query)
    print(f'result_set={result.fetchall()}')

学到这里,我们发现SQLAlchemy的用法和Mybatis-Plus很像!

2. ORM映射

SQLAlchemy 也是一个 ORM对象关系映射框架,和Java的Mybatis、Mybatis-plus 类似,也支持直接通过对象自动映射到表,从而更方便CRUD的操作。

2.1 实体类

Mybatis 需要有对应的实体类,SQLAlchemy 也一样。实体类的属性其实对应的就是表的字段,因此这里的实体类形式很像对表的描述,例如:

from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base

# 创建引擎
engine = create_engine('mysql://root:root@localhost:3306/kcl2024?charset=utf8', echo=True)
Base = declarative_base()

# 定义映射关系类

class Subject(Base):
    __tablename__ = 'subject'
    id = Column(Integer, primary_key=True)
    name = Column(String(255), unique=True, nullable=True)
    score = Column(Integer, unique=False)

2.2 ORM CRUD

这里介绍通过ORM的方式实现CRUD

篇幅有限,我们假定我们已经前提准备好Session

2.2.1 增加

事实上语法与我们直接从connection执行sql很像,区别仅在于Session与对象实例传参方式,直接上示例:

# 创建实例
math = Subject(name='math', score=100)
chinese = Subject(name='chinese', score=90)

# 添加实例到 session
subject_list = [math, chinese]

# 添加实例到 session
session.add_all(subject_list)
session.commit()

这个示例演示了如何批量新增。单个新增参考connection的方式添加单个对象即可。最后别忘了commit哦。

2.2.2 查询

这里介绍几种常见的查询情况:

所有记录

# 查询所有记录
result = session.query(Subject).all()
# 遍历获取记录列表
for subject in result:
    print(subject.name, subject.score,type(subject))

查询出来的就是我们的Subject对象类型列表。

一条记录的情况

# 查询第一条记录
result_first = session.query(Subject.id, Subject.name, Subject.score).first()
if result_first:
    print(result_first.name, result_first.score)
    
# 只有一条记录的情况
result_one = session.query(Subject).filter(Subject.id == 1).one()
print(result_one.name, result_one.score)

# scalar() 返回第一列的值
result_scalar = session.query(Subject.name).filter(Subject.id == 1).scalar()
print(result_scalar)

查询记录数量

# 查询记录数量
result_count = session.query(Subject).count()
print(result_count)

2.2.3 删除

删除很简单,只需要调用delete()方法,我们直接看例子:

# 删除
session.query(Subject).filter(Subject.id == 22).delete()

result = session.query(Subject).all()
for subject in result:
    print(subject.id, subject.name, subject.score)

2.2.4 修改

SQLAlchemy 提供了如下修改方式,我们直接看示例:

# 修改方式1 ,先查询后修改
subject1 = session.query(Subject).filter(Subject.id == 1).first()
subject1.name = 'Java'

session.commit()

# 修改方式2 ,直接修改
session.query(Subject).filter(Subject.id == 2).update({'name': '高数'})

# 批量直接修改
session.query(Subject).filter(Subject.id > 2, Subject.id < 5).update({'score': 99})

# 查询全部
result = session.query(Subject).all()
for subject in result:
    print(subject.id, subject.name, subject.score)

值得注意的是,随便定一个对象是不能直接commit的,commit中间必须是从表里查询出来的对象。

2.3 更通用的Session

为了代码更复用,我们可以直接使用sqlalchemy.orm的Session:

from sqlalchemy import delete
from sqlalchemy.orm import Session
from db_init import engine
from orm_init import Subject

def batch_deleted():
    with Session(engine) as session:

        # session.excute 当 score < 100 时删除
        session.execute(delete(Subject).where(Subject.score < 100))

        result = session.query(Subject).all()
        for subject in result:
            print(subject.id, subject.name, subject.score)

3. 补充与总结

3.1 关联表如何查询?

使用 表的 join 方法。

对于现阶段的我们来说,由于Alchemy也只是作为一个python写的工具或者中间件以及独立的项目,一般还用不上join。真要join的情况一般还是在Java里的Mybatis/Mybtais-plus实现。

篇幅有限,这里暂时不描述了。
详情请参考参考教程以及官方文档:sqlalchemy官方文档

3.2 Mapped的映射方式

Mapped映射方式较新版本的SQLAlchemy特性。有了上文的基础,我们举个例子,就很好理解了。效果和colunm的映射方式是一致的:

from sqlalchemy.orm import sessionmaker, Mapped, mapped_column

# Mappped 的方式定义映射关系类
class Student(Base):
    __tablename__ = 'student'
    id: Mapped[int] = mapped_column(Column(Integer, primary_key=True))
    name: Mapped[str] = mapped_column(Column(String(255), unique=True, nullable=True))
    score: Mapped[int] = mapped_column(Column(Integer, unique=False))
    subject: Mapped[str] = mapped_column(Column(String(255), unique=False))
    
    
Base.metadata.create_all(engine)

3.3 Annotated 公共字段抽取

我们在Java字段中,常用BaseEntity来存放公共字段,然后用具体的entity extends 这个BaseEntity。在Python的SQLAlchemy中,类似的操作是用Annotated抽取公共字段,如下例子:

from typing_extensions import Annotated

# 公共字段
int_primary_key = Annotated[int, mapped_column(Integer, primary_key=True)]

# Mappped 的方式定义映射关系类
class Student(Base):
    __tablename__ = 'student'
    id: Mapped[int_primary_key]
    name: Mapped[str] = mapped_column(String(255), unique=True, nullable=True)
    score: Mapped[int] = mapped_column(unique=False)
    subject: Mapped[str] = mapped_column(String(255), unique=False)

3.4 总结

本文我们学习了Python的SQLAlchemy ORM 映射框架的使用。
我们首先学习了基于Connection的SQL语句执行,然后重点学习了基于ORM的映射CRUD。实际工作与学习中,基于ORM的方式更常用。

在学习的过程中,我们发现,Python 的SQLAlchemy使用方式与Java的Mybatis-Plus比较像,除了不用写xml,内置的方法单表查询也够用了。

3.5 结语

感谢大家阅读此文,希望我的内容能够给您带来启发和帮助。如果您喜欢我的文章,欢迎点赞、评论和分享,让更多人看到。期待与您在下一篇文章再相会!

参考教程

SQLALchemy 数据的 CRUD 操作 SQLAlchemy 是一个流行的 SQL 工具包和对象关系映射(ORM)库,用于 Python。它提供了一个高级接口来与数据库交互,允许开发者通过 Python 对象来执行 CRUD(创建、读取、更新、删除)操作,而无需编写大量的 SQL 语句。 阅读详情

相关推荐

Python每日练习:深入了解ORM框架

本文将深入介绍ORM框架的概念和使用方法,并提供相应的Python源代码示例。本文介绍了ORM框架的概念和优势,并以SQLAlchemy为例,提供了一个使用ORM框架进行数据库操作的示例。通过使用ORM框架,开发人员可以使用面向对象的方式来处理数据库操作,从而简化开发流程并提高代码的可维护性。在上面的示例中,我们首先创建了一个数据库连接,然后定义了一个名为User的模型类,该类对应于数据库中的一个表。在接下来的示例中,我们将使用SQLAlchemy作为我们的ORM框架。方法查询所有的User对象,并使用。

TechBurst的博客 369

python之sqlalchemy详解

python之sqlalchemy详解 SQLAlchemy连接数据库 可以使用ORM框架操作数据库 ORM框架 = object relationship mappiy 框架 学习前提(软件) mysql、pymysql(或者MySQLdb)、SQLAlchemy SQLAlchemy连接数据库 步骤 首先导入sqlalchemy.create_engine 输入配置信息(服务...

没有撤退可言. 2万+

Winform美化框架AntdUI中Table的使用方法

使用核心注意点: 数据模型中属性名需要完全与new Column里的列名一致否则添加数据源则无法读取到详细内容。

wevix的博客 3676

python常用库之数据库orm框架之SQLAlchemy

SQLAlchemy是一个基于Python实现的SQL工具包和ORM框架,提供了高层抽象来管理数据库交互。

西京刀客 2万+

Claude + Figma MCP 实战教程

• 拥有 Figma 的 Dev 或 Full seat(专业/企业账号)权限 才能启用 Dev-Mode MCP 服务 。• MCP 是通过标准接口连接 Claude 与 Figma,效率高,但目前仍为 Beta,稳定性可能有限。3. 服务启动后,会在本地运行,比如 http://127.0.0.1:3845/mcp 。如果设置正确,会显示已连接的 figma-dev-mode-mcp-server  。• 如果多次转换复杂组件,可能需要多次选择与多次生成,建议合理拆分设计任务。

weixin_49869937的博客 4445

STM32驱动GP2Y1010AU0F红外PM2.5传感器:从采样时序到浓度标定

在嵌入式环境监测项目中,模拟传感器输出信号的准确采集是系统可靠性的基石。许多工程师在接触红外散射式粉尘传感器时,常因不了解其特殊的脉冲驱动与采样保持机制,导致ADC读数异常。红外散射原理通过检测颗粒物散射光强来估算粉尘浓度,其输出信号并非稳定直流,而是与LED脉冲同步的短时窗口电压。理解这一时序特征,并掌握在STM32平台上通过定时器与ADC协同完成微秒级精准采样的方法,是获取有效数据的关键。该技术广泛应用于室内空气质量检测、空气净化器控制及DIY环境监测节点等场景。本文以GP2Y1010AU0F为例,详细

weixin_29159127的博客 282

Python 数据持久层ORM框架 SQLAlchemy模块

SQLAlchemy:强大的数据库抽象层,简化ORM操作,提供高效查询接口,支持多种数据库引擎。解锁数据交互潜能,助力开发者专注业务逻辑。选择SQLAlchemy,让数据库管理变得轻松而高效!

weixin_54217348的博客 4280

Android存储方案对比(SharedPreferences 、 MMKV 、 DataStore)

简介:本文介绍了Android开发中常用的键值对存储方案,包括SharedPreferences、MMKV和DataStore,并且对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。

LiuYong_01的博客 1779

Flask-SQLAlchemy 组件

字段类型Integer 普通整数,一般是32位SmallInteger 取值范围小的整数,一般是16位BigInteger 不限制精度的整数Float 浮点数Numeric 普通整数,一般是32位String 变长字符串Text 变长字符串,对较长或不限长度的字符串做了优化JSON JSON 数据Unicode 变长 Unicode 字符串UnicodeText 变长 Unicode 字符串,对较长或不限长度的字符串做了优化Boolean 布尔值。

longe20111104的博客 1947

【电机驱动与运动控制】期末重点问题集合

问题1 梯形曲线和S形曲线各自的特点和区别,比较梯形和S形曲线位置、速度、加速度、加加速度的区别。 问题2 总惯量的计算包含哪几个部分? 哪几个部分需要进行折算? 在齿轮箱的输出侧(2号轴)总惯量需要折算到齿轮箱的输入侧(1号轴) 为什么需要折算? 齿轮箱比的存在使2号轴的转速和电机的转速不同 问题3 指出每个部分的名称。 每个部分的功能。 主磁极的励磁绕组:绝大部分直流电机都是由励磁绕组通以直流电建立主磁场; - 电枢铁心:在两个主磁极内表面之间,由硅钢片叠成的圆

【人工智障 | 计算鸡视觉 | 机器孩】 5703

虚拟机安装VMware Tools

单击虚拟机-->安装VMware Tool 安装之后会有一个VMware Tools硬盘,里面有VMware Tools.tar.gz的压缩包 按照提示解压它,然后执行vmware-install.pl安装VMware Tools 将安装包放到/tmp目录下。可以直接拽过去,也可以使用cp或者mv命令 进入tmp文件目录并解压此文件包 cd /tmp ...

afei001 620

Flask框架中SQLAlchemy的使用方法

config.py。

2509_94087036的博客 271

SillyTavern本地AI聊天平台部署与调优全指南

大型语言模型(LLM)作为当前人工智能领域的核心技术,通过其强大的自然语言理解和生成能力,正在深刻改变人机交互方式。其工作原理基于Transformer架构,通过海量数据训练,学习语言的统计规律与语义关联。这项技术的核心价值在于,它能够作为通用基础,赋能于多样化的下游应用,实现个性化的智能对话与内容创作。在工程实践中,如何高效、灵活且低成本地部署和利用这些模型,成为开发者与爱好者的关键需求。本地化部署方案,特别是结合如Ollama、KoboldCPP等推理引擎,提供了数据隐私保障与可控的硬件成本。Silly

weixin_42520448的博客 430

开源框架汇总

  SQLAlchemy——数据持久层框架 简介 SQLAlchemy 主要由两部分组成,一个 SQL 工具包和一个关系对象映射(ORM),它能让开发者完全发挥出 SQL的灵活性与强大的能量。他实现了一整套企业级持久层模式,可以通过简单而 Pythonic的接口,进行高效率和高性能的数据库访问。SQLAlchemy 的 ORM

tianxia009的专栏 935

ABAP BDC 处理踩坑笔记:把错误挡在录制之前,把稳定做进每一行 BDCDATA

本文总结了SAP BDC(批输入)开发中的常见问题和解决方案。重点包括:1)理解BDCDATA本质是模拟人工操作而非直接操作数据库;2)数据格式化技巧,如金额、日期、物料号等字段的标准化处理;3)通过CTU_PARAMS参数控制执行环境,确保屏幕尺寸和更新模式一致;4)不要依赖sy-subrc,应通过解析MESSTAB消息判断业务是否成功;5)录制阶段的常见陷阱及解决方法;6)疑难问题的系统性解决思路;7)建议建立完善的错误处理机制,包括日志记录和重跑功能。文章提供了实用的ABAP代码示例和配置建议,帮助开

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 262

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数据库ORM:SQLAlchemy轻松上手

在SQLAlchemy中,定义模型就是定义Python类。这些类通常继承自一个声明基类。现在,我们来定义一个简单的用户模型。假设用户表包含:ID、用户名、邮箱、简介、注册时间。在# 指定表名# 定义列id = Column(Integer, primary_key=True) # 主键,自增username = Column(String(50), unique=True, nullable=False, index=True) # 用户名,唯一,非空,建立索引。

Science prince的博客 374

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Java转AI开发必看:SQLAlchemy从入门到精通,一文搞定Python数据库操作】

定义:ORM(Object-Relational Mapping)模型,即对象关系映射,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。在面向对象的编程语言中,如Java、Python等,数据通常被组织成复杂的对象关系。简单来说就是ORM模型把面向对象编程与操作数据库之间建立了映射。设置开发者操作数据库无需维护和编写SQL语句,而是基于面对对象的方式操作数据库。映射关系:数据库中的表>编程语言中的类,表中的字段>类中的属性,表之间的关系>类之间的关系。

weizi77的博客 653

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python 开源项目

SQLAlchemy——数据持久层框架 简介 SQLAlchemy 主要由两部分组成,一个 SQL 工具包和一个关系对象映射(ORM),它能让开发者完全发挥出 SQL 的灵活性与强大的能量。他实现了一整套企业级持久层模式,可以通过简单而 Pythonic 的接口,进行高效率和高性能的数据库访问。SQLAlchemy 的 ORM 遵从 DataMapping 设计模式,而 Elixir 则是在 S

333

超越Python:下一步该学什么编程语言?

python# 创建基类# 定义一对多关系# 定义多对一关系# 定义多对多关系(通过关联表)# 关联表(用于多对多关系)SQLAlchemy ORM提供了强大而灵活的数据库操作方式,通过本文的介绍,您应该能够:安装和配置SQLAlchemy定义数据模型和关系执行基本的CRUD操作构建复杂查询管理数据库事务遵循最佳实践SQLAlchemy还有更多高级特性,如混合属性、事件监听、自定义查询等,值得进一步探索学习。

rikog99716的博客 438

技术文章 | Python Web框架:Django vs Flask vs Pyramid

Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事。我们将会用三种框架实现相同功能的应用来更容易的对比三者。也可以直接跳到框架实战(Frameworks in Action)章节查看代码(code)。

CS13522431352的博客 833

python orm框架SQLAlchemy简单应用(数据库操作)

#_*_coding:utf-8_*_ ''' 创建SQLAlchemy应用基本过程 1、创建连接(和关系数据库创建连接) 2、声明映射文件(python中到类和数据库中的表做一对一的映射,这样就可以通过python中的类对数据库中到表进行操作) 3、创建模式(可以创建表) 4、初始化映射实例 5、创建会话 6、持久化实例对象 ''' fromsqlalchemyimp...

weixin_33721427的博客 128

选择一个 Python Web 框架:Django vs Flask vs Pyramid 您的评价

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34381666的博客 214

Python的ORM框架:SQLAlchemy

什么是ORM 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据(描述数据的数据),将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元...

CoderYYN 655

ORM框架

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决的技术ORM框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。建立两个映射关系。

果粒程 5324

python orm框架哪个最好_Django和SQLAlchemy,哪个Python ORM更好?

ORM是什么?在介绍Python下的两个ORM框架(Django和SQLAlchemy)的区别之前,我们首先要充分了解ORM框架的用途。ORM代表对象关系映射。ORM中的每个单词解释了他们在实际项目中的用途:对象(Object):这部分表示哪个对象或者在哪种编程语言下使用这个框架,例如Python。关系(Relational):这部分表示你正在使用的RDBMS数据库(关系数据库管理器系统)。有许多...

weixin_36179402的博客 1957

Django和SQLAlchemy,哪个Python ORM更好?

原文:Django vs SQLAlchemy – Which Python ORM is better? 作者:EverSQL团队 翻译:雁惊寒 译者注:本文首先介绍了什么是ORM,然后从多个方面对Python语言下的两个ORM库Django和SQLAlchemy进行比较,为ORM的选型提供了较为全面的指导建议。以下是译文。ORM是什么?在介绍Python下的两个ORM框架(D...

博客 6380
上一篇: 【Python】快速入门Python一天学完基础语法
下一篇: 【Python】Scrapy爬虫网页分析入门实战
CoderSharry
博客等级 码龄4年 515粉丝 69原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值