📜  SQLAlchemy ORM-声明映射(1)

📅  最后修改于: 2023-12-03 15:05:19.593000             🧑  作者: Mango

SQLAlchemy ORM-声明映射

什么是ORM?

ORM(对象关系映射)是一种编程技术,用于实现面向对象编程语言与关系型数据库之间的数据转换。ORM框架将数据库中的表和记录映射为面向对象编程语言中的类和对象,开发者无需编写SQL语句即可访问和操作数据库。ORM框架的出现极大地提高了程序员的工作效率。

SQLAlchemy ORM概述

SQLAlchemy是一个Python SQL工具和对象关系映射器(ORM)。它提供了广泛的SQL支持,并具有强大的ORM功能。利用ORM功能,开发者可以基于Python类和简单的语法,轻松访问数据库。

SQLAlchemy ORM提供了三种方法执行ORM操作:

  1. 声明式映射
  2. 数据库模式创建
  3. SQL表达式语言

本文将介绍SQLAlchemy ORM声明映射的方法,其它两种方法将在后续文档中介绍。

声明式映射

ORM API最常见的形式就是将Python类映射到数据库表中。映射的方法有两种——一种是Python类的基类使用ORM API,在新类中来描述其结构;另一种是使用装饰器,并在不改变类定义的前提下对其进行扩展。SQLAlchemy ORM具有将SQL表的结构映射到Python类和将Python类生成的数据映射到SQL表的能力。

声明一个映射

在SQLAlchemy中,映射由Python类来表示,ORM定义了这个类的元素和它们如何映射到SQL数据库中的表格。

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base

engine = create_engine("sqlite:///example.db")
Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

    def __repr__(self):
        return f"<User(name={self.name}, age={self.age})>"

在这个例子中,我们创建了一个名为User的Python类,并将它映射到了名为users的数据库表。

创建一个表

创建表的工作是通过调用Base.metadata.create_all()实现的。使用该函数,ORM将扫描所有映射的类,找到它们所对应的表,并将这些表格创建到数据库中。

Base.metadata.create_all(engine)
创建一个会话

在ORM中,会话用于管理Python对象和SQLAlchemy ORM之间的交互。会话使用Python对象来表示数据库中的行,并追踪数据的修改。同时,会话还可以管理Python对象之间的关系。ORM中的Session类扮演着这个角色。创建一个Session实例的方法可以使用sessionmaker()函数,该函数构建了第一个类型的会话工厂。

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()
创建用户

创建一个Python对象并将它转换为数据库行,要使用以下步骤:

  1. 构造一个新的Python对象。
  2. 将此对象添加到Session对象中。
  3. 调用Session.commit()方法将新行写入数据库。
user = User(name="Tom", age=20)
session.add(user)
session.commit()
查询用户

可以通过调用query()方法来构造一个SQL语句,在执行之前会将其自动编译为SQL。query()方法获取模型类的参数,并使用模型的属性来修改其行为。

query = session.query(User)
users = query.filter(User.name == "Tom").all()

filter()方法可以用于应用条件表达式。all() 方法将返回所有匹配条件的结果。

以上就是SQLAlchemy ORM声明映射的基本内容。使用ORM,程序员可以避免大量编写SQL语句的工作,同时获得数据访问的更高的抽象层次。在实际应用中,ORM可以帮助程序员更加高效地进行开发工作。