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

python SQLAlchemy的Mapping與Declarative詳解

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

前面介紹過vSQLAlchemy中的 Engine 和 Connection,這兩個(gè)對象用在row SQL (原生的sql語句)上操作,而 ORM(Object Relational Mapper)則是一種用面向?qū)ο蟮乃季S來操作表數(shù)據(jù)的技術(shù)。所謂ORM 就是Python 對象到數(shù)據(jù)表的一種映射關(guān)系。

以前 SQLAlchemy 是怎么把Python對象和數(shù)據(jù)庫中表里面的每條記錄進(jìn)行映射的呢?通過一個(gè)mapping函數(shù)

先來看個(gè)例子:

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

# 數(shù)據(jù)庫的元數(shù)據(jù),你可以認(rèn)為它是一個(gè)容器,裝載了所有的表結(jié)構(gòu)
metadata = MetaData()

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

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

# 通過mapper函數(shù)進(jìn)行映射關(guān)聯(lián)
mapper(Article, article)

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

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

mapper 函數(shù)進(jìn)行映射后,通過query查詢返回的結(jié)果,會(huì)自動(dòng)將返回結(jié)果構(gòu)造成一個(gè)Article對象,并擁有了id 屬性,這就是ORM的魔力所在。

而新的ORM映射不需要手動(dòng)通過mapping函數(shù)來關(guān)聯(lián)table與類之間的關(guān)系,可以直接通過聲明(Declarative )系統(tǒng)(我不知道這樣翻譯對不對)來定義一個(gè)類,這個(gè)類會(huì)直接映射到數(shù)據(jù)庫的表,declarative 把 Table、mapper、還有類這三者放在一塊進(jìn)行聲明,從而實(shí)現(xiàn)了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函數(shù),只有一個(gè)類的定義,這個(gè)類必須繼承基類 Base,Base 就是我們的聲明系統(tǒng),這樣就完成了Table與類之間的映射關(guān)系,而背后的操作都是通過一個(gè)declarative_base 工廠方法構(gòu)造的聲明系統(tǒng)完成的。

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

>>> print(Article.__table__)
news_article

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    Ubuntu16安裝Python3.9的實(shí)現(xiàn)步驟

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

    Django實(shí)現(xiàn)帶進(jìn)度條的倒計(jì)時(shí)功能詳解

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

    Python實(shí)現(xiàn)多功能音樂播放器詳解

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

    詳解python字符串相關(guān)str

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

    Python正則表達(dá)式和元字符詳解

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

    使用python制作一個(gè)壓縮圖片小程序

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

    Python PSO算法處理TSP問題詳解

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

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

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

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

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

最新評論