Hello World(SQLAlchemy ORM)

此示例显示如何使用 SQLAlchemy ORM 创建表,插入数据以及从数据库中进行选择。有关信息: SQLAlchemy Core,请参阅此处

首先,我们需要连接到我们的数据库,这与我们使用 SQLAlchemy Core(Core) 连接的方式相同。

from sqlalchemy import create_engine

engine = create_engine('sqlite://')

在连接和创建引擎之后,我们需要定义和创建表。这是 SQLAlchemy ORM 语言开始与 Core 大不相同的地方。在 ORM 中,表创建和定义过程首先定义表和我们将用于映射到这些表的类。此过程在 ORM 中的一个步骤中完成,SQLAlchemy 将其称为 Declarative 系统。

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

既然声明了我们的基本映射器,我们可以从它继承它来构建我们的声明性映射 ,或者 models

from sqlalchemy import Column, Integer, String

class Message(Base):
    __tablename__ = 'messages'
    
    id = Column(Integer, primary_key=True)
    message = Column(String)

使用声明性基类,我们最终创建了一个 TableMapper 对象。来自文档:

Table 对象是一个名为 MetaData 的较大集合的成员。使用 Declarative 时,可以使用声明性基类的 .metadata 属性来使用此对象。

考虑到这一点,要创建所有尚不存在的表,我们可以调用下面的命令,该命令使用 SQLAlchemy Core 的 MetaData 注册表。

Base.metadata.create_all(engine)

现在我们的表被映射和创建,我们可以插入数据! 插入是通过创建映射器实例完成的

message = Message(message="Hello World!")
message.message # 'Hello World!

此时,我们所拥有的只是 ORM 抽象级别级别的消息实例,但尚未将任何内容保存到数据库中。要做到这一点,首先我们需要创建一个会话

from sqlalchemy.orm import sessionmaker

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

此会话对象是我们的数据库处理程序根据 SQLAlchemy 文档:

它从引擎维护的连接池中检索连接,并保持连接,直到我们提交所有更改和/或关闭会话对象。

现在我们有了会话,我们可以新消息添加到会话并将更改提交到数据库。

session.add(message)
session.commit()

现在我们有了数据,我们可以利用 ORM 查询语言来提取数据。

query = session.query(Message)
instance = query.first()
print (instance.message) # Hello World!

但那只是一个开始! 还有更多可用于撰写查询的功能,如 filterorder_by 等等。有关更多示例和信息,请参阅 SQLAlchemy ORM 教程