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 教程