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

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

ruisui883个月前 (01-21)技术分析13

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” 的相关文章

最古老的Linux发行版刚刚进行了重大更新

Slackware 15.0 带来了全新的 KDE Plasma 5 桌面体验。Slackware Linux(仍然维护的最古老的Linux发行版)的制造商刚刚发布了Linux发行版的15.0版本。Slackware Linux于1993年出现,创始人Patrick Volderding今天继续维护...

「干货」通俗易懂的Deno 入门教程

作者: semlinker转发链接:https://mp.weixin.qq.com/s/2eqRTsf_z7Bcs6dziXe73Q一、Deno 简介Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码,有着卓越的开发体验。Deno 含有以下功能亮点:默...

GitLab-创建分支

描述分支是独立的生产线,是开发过程的一部分。分支的创建涉及以下步骤。创建一个分支步骤1-登录您的GitLab帐户,然后转到“ 项目”部分下的项目。步骤2-要创建分支,请单击“ 存储库”部分下的“ 分支”选项,然后单击“ 新建分支”按钮。步骤3-在“ 新建分支”屏幕中,输入分支的名称,然后单击“ 创建...

Windows 下 Git 拉 Gitlab 代码

读者提问:『阿常你好,Windows 下 Git 拉 Gitlab 代码的操作步骤可以分享一下吗?』阿常回答:好的,总共分为五个步骤。一、Windows 下安装 Git官网下载链接:https://git-scm.com/download/winStandalone Installer(安装版)注意...

编码 10000 个小时后,开发者悟了:“不要急于发布!”

【CSDN 编者按】在软件开发的道路上,时间是最好的老师。根据“一万小时定律”,要成为某个领域的专家,通常需要大约一万小时的刻意练习。本文作者身为一名程序员,也经历了一万小时的编程,最终悟出了一个道理:慢即是快,重视架构设计和代码质量,确保每一行代码都经得起时间的考验。作者 | Sotiris Ko...

VUE-router

七.Vue-router1、什么是vue-routervue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是单页应用,就相当于只有一个主的i...