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)
使用声明性基类,我们最终创建了一个 Table
和 Mapper
对象。来自文档:
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!
但那只是一个开始! 还有更多可用于撰写查询的功能,如 filter
,order_by
等等。有关更多示例和信息,请参阅 SQLAlchemy ORM 教程 。