欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python SQLAlchemy的Mapping與Declarative詳解

系統 1615 0

前面介紹過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函數進行映射關聯
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 有什么用的?可以通過它來創建表或者刪除表。

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费国产一级特黄久久 | 天堂资源8中文最新版 | xx免费视频| 五月婷亚洲 | 天天草夜夜骑 | 五月天播播网 | 麻豆免费永久网址入口网址 | 谍影特工在线观看完整版 | 国产成人小视频在线观看 | 免费久久久久 | 日本一区二区三区不卡在线看 | 欧美最黄视频 | 日本黄色激情 | 国产综合亚洲精品一区二 | 国产欧美一区二区三区免费看 | 日韩精品在线播放 | 天天摸天天操免费播放小视频 | 欧美人成在线 | 免费一区二区三区免费视频 | 久草国产精品 | 久久国产精品一区二区三区 | 国产精品一区二区三区免费 | 久久精品无码一区二区日韩av | 午夜不卡电影 | 色综合亚洲精品激情狠狠 | 亚洲欧美一区二区三区情侣bbw | 精品一区二区在线观看视频 | 久草在线视频免费看 | 久久蜜桃亚洲一区二区 | 亚洲欧美日韩中文字幕在线不卡 | 日韩欧美h| 天天操天天操天天操香蕉 | 久草在线电影网 | 99热热99 | 五月婷亚洲| 免费黄色小视频 | 国产成人精品福利网站在线观看 | 亚洲综合久久久久久888 | 青青久操视频 | 乳欲人妻办公室奶水在线电影国产 | 欧美激情综合色综合啪啪五月 |