1. 程式人生 > 資料庫 >python SQLAlchemy的Mapping與Declarative詳解

python SQLAlchemy的Mapping與Declarative詳解

這篇文章主要介紹了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",primary_key=True),Column("title",String)``
        )
 
# 這是一個普通的Article類
class Article:
  def __init__(self,title):
    self.title = title
 
# 通過mapper函式進行對映關聯
mapper(Article,article)

關聯後怎麼使用呢?看例子:

from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
# 通過Artcile類來查詢id==4554的記錄,這完全是用面向物件的方式執行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函式來關聯table與類之間的關係,可以直接通過宣告(Declarative )系統(我不知道這樣翻譯對不對)來定義一個類,這個類會直接對映到資料庫的表,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 就是我們的宣告系統,這樣就完成了Table與類之間的對映關係,而背後的操作都是通過一個declarative_base 工廠方法構造的宣告系統完成的。

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

>>> print(Article.__table__)
news_article
 
>>>print(Article.__mapper__)
Mapper|Article|news_article
 
# 前面將的metadata 可以通過 Base 獲取
>>>print(Base.metadata)
MetaData(bind=None)

MetaData 有什麼用的?可以通過它來建立表或者刪除表。

以上就是本文的全部內容,希望對大家的推薦我們的Python學習扣qun:913066266 ,看看前輩們是如何學習的!從基礎的python指令碼到web開發、爬蟲、django、資料探勘等【PDF,實戰原始碼】,零基礎到專案實戰的資料都有整理。送給每一位python的小夥伴!每天都有大牛定時講解Python技術,分享一些學習的方法和需要注意的小細節,點選加入我們的 python學習者聚集地學習有所幫助