📅  最后修改于: 2023-12-03 15:05:19.593000             🧑  作者: Mango
ORM(对象关系映射)是一种编程技术,用于实现面向对象编程语言与关系型数据库之间的数据转换。ORM框架将数据库中的表和记录映射为面向对象编程语言中的类和对象,开发者无需编写SQL语句即可访问和操作数据库。ORM框架的出现极大地提高了程序员的工作效率。
SQLAlchemy是一个Python SQL工具和对象关系映射器(ORM)。它提供了广泛的SQL支持,并具有强大的ORM功能。利用ORM功能,开发者可以基于Python类和简单的语法,轻松访问数据库。
SQLAlchemy ORM提供了三种方法执行ORM操作:
本文将介绍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对象并将它转换为数据库行,要使用以下步骤:
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可以帮助程序员更加高效地进行开发工作。