当前位置:首页 > 技术分析 > 正文内容

5 分钟认识 Python 的 ORM 框架-SQLAlchemy

ruisui885个月前 (01-21)技术分析22

SQLAlchemy是一个流行的Python ORM框架,它提供了一种简单的方式来管理数据库。在本文中,我们将深入探讨SQLAlchemy的各个方面,包括安装、配置、模型定义、查询和关系等。我们还将介绍一些常用的SQLAlchemy扩展,以及如何使用它们来增强您的数据库管理。

一、安装和配置

在开始使用SQLAlchemy之前,您需要安装Python和SQLAlchemy。您可以从Python官方网站(https://www.python.org/downloads/)下载Python,然后使用以下命令安装SQLAlchemy:

pip install sqlalchemy

安装完成后,您可以使用以下代码测试SQLAlchemy是否安装成功:

from sqlalchemy import create_engine

engine = create_engine('sqlite:///example.db')
connection = engine.connect()
result = connection.execute('SELECT 1')
print(result.fetchone())

运行该代码后,您将在控制台中看到“(1,)”的输出。这表明您已成功安装和配置SQLAlchemy。

二、模型定义

在SQLAlchemy中,模型是指用于表示数据库表的类。每个模型类都必须继承自“Base”类,并定义一个名为“tablename”的属性,该属性指定模型类对应的数据库表的名称。

例如,如果您的应用程序有一个名为“users”的数据库表,那么您可以编写一个名为“User”的模型类:

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

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    email = Column(String(50), nullable=False)

在上面的代码中,我们定义了一个名为“User”的模型类,它具有一个名为“id”的整数主键、一个名为“name”的字符串和一个名为“email”的字符串。

三、查询

在SQLAlchemy中,查询是指用于从数据库中检索数据的操作。您可以使用SQLAlchemy的查询API来执行各种类型的查询,例如简单查询、过滤查询、聚合查询和连表查询等。

以下是一些常用的查询示例:

  1. 简单查询

要执行简单查询,您可以使用以下代码:

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

users = session.query(User).all()
for user in users:
    print(user.name, user.email)

在上面的代码中,我们使用SQLAlchemy的“session”对象来执行查询。我们查询所有用户并将它们打印到控制台。

  1. 过滤查询

要执行过滤查询,您可以使用以下代码:

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

users = session.query(User).filter_by(name='John').all()
for user in users:
    print(user.name, user.email)

在上面的代码中,我们使用SQLAlchemy的“filter_by”方法来过滤用户。我们只查询名为“John”的用户并将它们打印到控制台。

  1. 聚合查询

要执行聚合查询,您可以使用以下代码:

from sqlalchemy.orm import sessionmaker
from sqlalchemy import func

Session = sessionmaker(bind=engine)
session = Session()

count = session.query(func.count(User.id)).scalar()
print(count)

在上面的代码中,我们使用SQLAlchemy的“func”模块来执行聚合查询。我们查询用户的数量并将其打印到控制台。

  1. 连表查询

要执行连表查询,您可以使用以下代码:

from sqlalchemy.orm import sessionmaker
from sqlalchemy import join

Session = sessionmaker(bind=engine)
session = Session()

query = session.query(User, Address).join(Address)
for user, address in query:
    print(user.name, address.street, address.city, address.state)

在上面的代码中,我们使用SQLAlchemy的“join”方法来执行连表查询。我们查询所有用户和它们的地址,并将它们打印到控制台。

四、关系

在SQLAlchemy中,关系是指用于连接模型之间的关联的属性。您可以使用SQLAlchemy的关系API来定义各种类型的关系,例如一对多关系、多对多关系和自引用关系等。

以下是一些常用的关系示例:

  1. 一对多关系

要定义一对多关系,您可以使用以下代码:

from sqlalchemy.orm import relationship

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    email = Column(String(50), nullable=False)

    addresses = relationship('Address', back_populates='user')

class Address(Base):
    __tablename__ = 'addresses'

    id = Column(Integer, primary_key=True)
    street = Column(String(50), nullable=False)
    city = Column(String(50), nullable=False)
    state = Column(String(50), nullable=False)

    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship('User', back_populates='addresses')

在上面的代码中,我们定义了一个名为“User”的模型类和一个名为“Address”的模型类。我们使用“relationship”方法来定义用户和地址之间的一对多关系。

  1. 多对多关系

要定义多对多关系,您可以使用以下代码:

from sqlalchemy.orm import relationship

association_table = Table('association', Base.metadata,
    Column('user_id', Integer, ForeignKey('users.id')),
    Column('group_id', Integer, ForeignKey('groups.id'))
)

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    email = Column(String(50), nullable=False)

    groups = relationship('Group', secondary=association_table, back_populates='users')

class Group(Base):
    __tablename__ = 'groups'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)

    users = relationship('User', secondary=association_table, back_populates='groups')

在上面的代码中,我们定义了一个名为“User”的模型类和一个名为“Group”的模型类。我们使用“relationship”方法和“association_table”表来定义用户和组之间的多对多关系。

五、常用扩展

在SQLAlchemy中,有许多有用的扩展可用于增强您的数据库管理。以下是一些常用的SQLAlchemy扩展:

  1. Flask-SQLAlchemy:用于在Flask应用程序中使用SQLAlchemy的扩展。
  2. Alembic:用于数据库迁移和版本控制的扩展。
  3. SQLAlchemy-Searchable:用于全文搜索的扩展。
  4. SQLAlchemy-Utils:用于提供常用的SQLAlchemy实用程序的扩展。
  5. SQLAlchemy-Continuum:用于历史记录和版本控制的扩展。

六、总结

SQLAlchemy是一个流行的Python ORM框架,它提供了一种简单的方式来管理数据库。在本文中,我们深入探讨了SQLAlchemy的各个方面,包括安装、配置、模型定义、查询和关系等。使用愉快!

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/424.html

标签: c# orm框架
分享给朋友:

“5 分钟认识 Python 的 ORM 框架-SQLAlchemy” 的相关文章

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了,所以真的要学习一下 Vue3.0 的语法了。本篇文章总共分两部分,望小伙伴们认真阅读。下一篇:10...

Gitlab+Jenkins通过钩子实现自动部署web项目,图文详细教程

扩展参考:Jenkins+Gitlab通过脚本自动部署回滚web项目至集群 一:基础环境介绍及准备1):Gitlab服务器:ubuntu 192.168.152.131 ---参考搭建:Linux安装gitlab,docker安装gitlab教程2):Jenkins服务器:ubunu 192.168...

10分钟搞定gitlab-ci自动化部署

gitlab-ci 是持续集成工具/自动化部署工具,类似 jenkins。持续集成 是将代码集成到共享存储库并尽可能早地自动构建/测试每个更改的实践 - 通常一天几次。概述在编码完成时都会进行打包发布过程,如果每次都手动操作这一步骤就会浪费时间,效率低下。所以就有了持续集成。准备事项请提前安装以下软...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...

K8S NFS 共享存储

NFS 共享存储前面我们学习了 hostPath 与 Local PV 两种本地存储方式,但是平时我们的应用更多的是无状态服务,可能会同时发布在不同的节点上,这个时候本地存储就不适用了,往往就需要使用到共享存储了,比如最简单常用的网络共享存储 NFS,本节课我们就来介绍下如何在 Kubernetes...

多项修正 尼康D4s发布最新1.10版固件

尼康公司与2014年8月27日发布了D4s的最新固件,固件版本号为C:1.10。这次固件升级,主要解决了一些BUG,并且对拍摄菜单与相机操作做了一定调整。下面是本次新固件的具体信息:尼康发布D4s最新C固件 1.10版对C固件升级到1.10版所作的修改:当选定运动VR模式并换上 AF-S 尼克尔 4...