日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQLAlchemy 教程 —— ORM 方式使用示例

發布時間:2025/3/15 数据库 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLAlchemy 教程 —— ORM 方式使用示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看一個圖:

這是 sqlalchemy 的層級圖。不難發現,其中 orm 是最頂級的封裝。

?

ORM 基本操作步驟如下:

1. 建立連接

from sqlalchemy import create_engineengine = create_engine('sqlite:///:memory:', echo=True)

2. 建立會話

from sqlalchemy.orm import Sessionsession = Session(engine) engine = create_engine(connection_string, connect_args={'timeout': 20}) entities.Base.metadata.create_all(engine) DB_Session = sessionmaker(bind=engine)

3. 聲明基類

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

4. 定義表(繼承基類)

from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy.orm import relationshipclass Parent(Base):__tablename__ = 'parent'id = Column(Integer, primary_key=True)children = relationship("Child")def __repr__(self):return "<Parent(id='{}', children='{}')>".format(self.id, self.children)class Child(Base):__tablename__ = 'child'id = Column(Integer, primary_key=True)parent_id = Column(Integer, ForeignKey('parent.id'))def __repr__(self):return "<Child(id='{}', parent_id='{}')>".format(self.id, self.parent_id)

5. 生成表

Base.metadata.drop_all(engine) Base.metadata.create_all(engine) # 生產環境只需運行一次!!!!

6. 添加記錄

session.add_all([Parent(children=[Child() for j in range(5)]) for i in range(2)]) session.commit()

7. 查詢

# 懶加載 (lazyload) # load everything, no eager loading. for parent in session.query(Parent):print(parent.children)# 聯合加載 (joinedload) # load everything, joined eager loading. for parent in session.query(Parent).options(joinedload("children")):parent.children# 子查詢加載 (subqueryload) # load everything, subquery eager loading. for parent in session.query(Parent).options(subqueryload("children")):parent.children

8. 完整代碼

from sqlalchemy import create_engine from sqlalchemy.orm import Session from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.orm import joinedload, subqueryload# 建立連接 engine = create_engine('sqlite:///:memory:', echo=True)# 建立會話 session = Session(engine)# 聲明基類 Base = declarative_base()# 定義表(繼承基類) class Parent(Base):__tablename__ = 'parent'id = Column(Integer, primary_key=True)children = relationship("Child")def __repr__(self):return "<Parent(id='{}', children='{}')>".format(self.id, self.children)class Child(Base):__tablename__ = 'child'id = Column(Integer, primary_key=True)parent_id = Column(Integer, ForeignKey('parent.id'))def __repr__(self):return "<Child(id='{}', parent_id='{}')>".format(self.id, self.parent_id)# 生成表 Base.metadata.drop_all(engine) Base.metadata.create_all(engine) # 生產環境只需運行一次!!!!# 添加記錄 session.add_all([Parent(children=[Child() for j in range(5)]) for i in range(2)]) session.commit()# 查詢 # lazyload # load everything, no eager loading. for parent in session.query(Parent):print(parent.children)# joinedload # load everything, joined eager loading. for parent in session.query(Parent).options(joinedload("children")):parent.children# subqueryload # load everything, subquery eager loading. for parent in session.query(Parent).options(subqueryload("children")):parent.children

?

總結

以上是生活随笔為你收集整理的SQLAlchemy 教程 —— ORM 方式使用示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。