欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python SQLAlchemy的Mapping與Declarative詳解

 更新時間:2019年07月04日 10:44:35   作者:FOOFISH-PYTHON之禪  
這篇文章主要介紹了python SQLAlchemy的Mapping與Declarative詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前面介紹過vSQLAlchemy中的 Engine 和 Connection,這兩個對象用在row SQL (原生的sql語句)上操作,而 ORM(Object Relational Mapper)則是一種用面向對象的思維來操作表數據的技術。所謂ORM 就是Python 對象到數據表的一種映射關系。

以前 SQLAlchemy 是怎么把Python對象和數據庫中表里面的每條記錄進行映射的呢?通過一個mapping函數

先來看個例子:

from sqlalchemy import Table, MetaData, Column, Integer, String,
from sqlalchemy.orm import mapper

# 數據庫的元數據,你可以認為它是一個容器,裝載了所有的表結構
metadata = MetaData()

# 數據庫中的news_article表
article = Table("news_article", metadata,
        Column("id", Integer, primary_key=True),
        Column("title", String)
        )

# 這是一個普通的Article類
class Article:
  def __init__(self, title):
    self.title = title

# 通過mapper函數進行映射關聯(lián)
mapper(Article, article)

關聯(lián)后怎么使用呢?看例子:

from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
# 通過Artcile類來查詢id==4554的記錄,這完全是用面向對象的方式執(zhí)行sql了
# 返回結果就是Article的實例對象
result = session.query(Article).filter(Article.id==4554).first()
print(result.id) # 4554
print(result.title) # xxxxxxxxx

mapper 函數進行映射后,通過query查詢返回的結果,會自動將返回結果構造成一個Article對象,并擁有了id 屬性,這就是ORM的魔力所在。

而新的ORM映射不需要手動通過mapping函數來關聯(lián)table與類之間的關系,可以直接通過聲明(Declarative )系統(tǒng)(我不知道這樣翻譯對不對)來定義一個類,這個類會直接映射到數據庫的表,declarative 把 Table、mapper、還有類這三者放在一塊進行聲明,從而實現了ORM的映射。來看例子:

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Article(Base):
  __tablename__ = 'news_article'
  id = Column(Integer, primary_key=True)
  title = Column(String(50))

是不是簡單很多了,沒有了Table的定義,沒有mapper函數,只有一個類的定義,這個類必須繼承基類 Base,Base 就是我們的聲明系統(tǒng),這樣就完成了Table與類之間的映射關系,而背后的操作都是通過一個declarative_base 工廠方法構造的聲明系統(tǒng)完成的。

我們把 Article 又稱之為映射類,這個類持有 Table 和 mapper 函數的引用。

>>> print(Article.__table__)
news_article

>>>print(Article.__mapper__)
Mapper|Article|news_article

# 前面將的metadata 可以通過 Base 獲取
>>>print(Base.metadata)
MetaData(bind=None)

MetaData 有什么用的?可以通過它來創(chuàng)建表或者刪除表。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python并發(fā)編程之未來模塊Futures

    Python并發(fā)編程之未來模塊Futures

    這篇文章主要為大家介紹了Python的未來,python并發(fā)編程之未來模塊Futures的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Ubuntu16安裝Python3.9的實現步驟

    Ubuntu16安裝Python3.9的實現步驟

    這篇文章主要介紹了Ubuntu16安裝Python3.9的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Django實現帶進度條的倒計時功能詳解

    Django實現帶進度條的倒計時功能詳解

    這篇文章主要為大家詳細介紹了如何利用Django實現簡單的帶進度條的倒計時功能,可以在頁面加載后自動開始計時,下次計時需要手動刷新頁面,需要的可以參考一下
    2023-04-04
  • Python實現多功能音樂播放器詳解

    Python實現多功能音樂播放器詳解

    這篇文章主要介紹了如何通過Python制作一個簡易的音樂播放器,文中的示例代碼講解詳細,對我們學習或工作有一定價值,需要的可以參考一下
    2022-02-02
  • 詳解python字符串相關str

    詳解python字符串相關str

    這篇文章主要為大家介紹了python字符串相關str,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python正則表達式和元字符詳解

    Python正則表達式和元字符詳解

    這篇文章主要介紹了Python正則表達式和元字符詳解,需要的朋友可以參考下
    2018-11-11
  • 使用python制作一個壓縮圖片小程序

    使用python制作一個壓縮圖片小程序

    這篇文章主要為大家詳細介紹了如何使用python制作一個壓縮圖片小程序,文中的示例代碼簡潔易懂,具有一定的學習價值,感興趣的小伙伴可以了解下
    2023-10-10
  • Python PSO算法處理TSP問題詳解

    Python PSO算法處理TSP問題詳解

    這篇文章主要介紹了Python PSO算法處理TSP問題,PSO粒子群算法是一種基于鳥類覓食開發(fā)出來的優(yōu)化算法,它是從隨機解出發(fā),通過迭代尋找最優(yōu)解,通過適應度來評價解的品質
    2022-11-11
  • Pycharm代碼無法復制,無法選中刪除,無法編輯的解決方法

    Pycharm代碼無法復制,無法選中刪除,無法編輯的解決方法

    今天小編就為大家分享一篇Pycharm代碼無法復制,無法選中刪除,無法編輯的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python 簡單的繪圖工具turtle使用詳解

    python 簡單的繪圖工具turtle使用詳解

    這篇文章主要介紹了python 簡單的繪圖工具turtle使用詳解的相關資料,需要的朋友可以參考下
    2017-06-06

最新評論