<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        PythonORM框架SQLAlchemy學習筆記之關系映射實例

        來源:懂視網 責編:小采 時間:2020-11-27 14:30:30
        文檔

        PythonORM框架SQLAlchemy學習筆記之關系映射實例

        PythonORM框架SQLAlchemy學習筆記之關系映射實例:昨天簡單介紹了SQLAlchemy的使用,但是沒有能夠涉及其最精彩的ORM部分,今天我將簡單說明一下,當然主要還是講解官方文檔的內容,由于是學習筆記,有可能存在精簡或者自己理解的部分,不做權威依據。 當我們開始使用ORM,一種可配置的結構可以用于描述我們的
        推薦度:
        導讀PythonORM框架SQLAlchemy學習筆記之關系映射實例:昨天簡單介紹了SQLAlchemy的使用,但是沒有能夠涉及其最精彩的ORM部分,今天我將簡單說明一下,當然主要還是講解官方文檔的內容,由于是學習筆記,有可能存在精簡或者自己理解的部分,不做權威依據。 當我們開始使用ORM,一種可配置的結構可以用于描述我們的

        昨天簡單介紹了SQLAlchemy的使用,但是沒有能夠涉及其最精彩的ORM部分,今天我將簡單說明一下,當然主要還是講解官方文檔的內容,由于是學習筆記,有可能存在精簡或者自己理解的部分,不做權威依據。

        當我們開始使用ORM,一種可配置的結構可以用于描述我們的數據庫表,稍后我們定義的類將會被映射到這些表上。當然現代的SQLAlchemy(新版本SQLAlchemy,原文是modern SQLAlchemy)使用Declarative把這兩件事一起做了,即允許我們把創建類和描述定義數據庫表以及它們之間的映射關系一次搞定。

        這段話是什么意思呢?簡單來說吧,SQLAlchemy分為Classic (經典模式)和Modern (現代模式),Classic定義數據庫表的模式比較傳統,需要先描述這個表。

        1. Classic 映射

        比如以官方文檔中的例子,我們擁有表結構如下:
        代碼如下:


        CREATE TABLE [users] (
        [id] INTEGER PRIMARY KEY,
        [name] TEXT NOT NULL,
        [fullname] TEXT NOT NULL,
        [password] TEXT NOT NULL
        );

        下面我們描述這張表:
        代碼如下:


        from sqlalchemy import Table, MetaData, Column, Integer, String

        metadata = MetaData()

        user = Table('users', metadata,
        Column('id', Integer, primary_key=True),
        Column('name', String(50)),
        Column('fullname', String(50)),
        Column('password', String(12))
        )


        好,這樣我們的表算是描述完成了,接下來我們需要定義我們的Python類,比如這樣的:
        代碼如下:


        class User(object):
        def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password


        如何讓我們定義的類與之前描述的表結構發生映射關系就是我們接下來要做的:
        代碼如下:


        from sqlalchemy.orm import mapper
        mapper(User, user)


        大家注意到mapper函數,第一個參數是我們類的名稱,第二個參數是我們先前描述的表定義。

        這就是傳統的定義ORM的方法,有關這個方法的更多信息,可以閱讀文檔Mapper Configuration,以后有機會再和大家詳談。

        2. Modern 映射

        當大家都樂此不疲的定義描述表,定義類,再映射來實現ORM的時候,SQLAlchemy團隊搞出了更簡單的映射方法,那就是Modern模式了,即通過定義映射類來一次性完成所有任務。

        為了定義的類能夠被SQLAlchemy管理,所以引入了Declarative這個概念,也就是說我們所有的類必須是Declarative基類的子類,而這個基類可以通過下面的辦法來獲?。?BR> 代碼如下:


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


        當然一個程序內,這個基類最好是唯一的,建議存儲在全局變量比如Base中供所有映射類使用。

        現在通過剛才的代碼我們得到了名為Base的基類,通過這個基類我們可以定義N多的映射子類,而這些子類都能被SQLAlchemy Declarative系統管理到。

        下面我們還是看剛才的那個users表的例子:
        代碼如下:


        from sqlalchemy import Column, Integer, String
        class User(Base):
        __tablename__ = 'users'

        id = Column(Integer, primary_key=True)
        name = Column(String)
        fullname = Column(String)
        password = Column(String)

        def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password

        def __repr__(self):
        return "" % (self.name, self.fullname, self.password)


        就這段代碼就完成了我們先前在Classic中需要的三步,代碼比原先更簡潔和容易管理了,同剛才Classic中Table定義的Column,這個代表數據庫表中的列,當然Integer和String代表著數據庫表的字段類型了。

        這樣User類就建立起與數據庫表的映射,真實表的名字可以使用__tablename__指明,然后是表列的集合,包括id、name、fullname以及password,當然想必大家已經知道了,我們通過primary_key=True已經指明id為主鍵了。當然一些數據庫表可能不包含有主鍵(例如視圖View,當然視圖也可以被映射),ORM為了能夠實際映射表需要至少一個列被定義為主鍵列。多列,比如復合多主鍵也能夠被很好地映射支持。

        大家可能注意到User類中還包含有通常意義上的Python魔術方法,包含__init__()初始化類(構造方法)以及__repr__()字符串化支持方法,當然這些都是可選的,如果需要這個類可以加入程序所需要的任意多方法或者屬性,你只要把這個類看作一個普通的Python類就可以了。

        當然User類唯一不能馬虎的就是必須繼承至Base,這個Base就是剛才我們通過declarative_base()生成的類,通過它我們可以接下來讓SQLAlchemy Declarative系統管理并操作這些映射類和數據庫表。

        實際上包括繼承的Base類,所有的類都應該是Python的新式類(new style class),關于新式類的更多信息可以參考Python手冊。

        隨著我們的User映射類通過Declarative系統構造成功,我們就擁有了相關的定義信息,比如在Classic定義中介紹的Table()描述,也包含映射到表的類,就是User自身,我們可以通過User.__table__來查看我們的表描述情況:
        代碼如下:


        >>> User.__table__
        Table('users', MetaData(None),
        Column('id', Integer(), table=, primary_key=True, nullable=False),
        Column('name', String(), table=),
        Column('fullname', String(), table=),
        Column('password', String(), table=), schema=None)


        當然找到描述表的數據結構,也應該能找到mapper,我們的Mapper對象可以通過__mapper__屬性來獲取,比如這樣的:
        代碼如下:


        >>> User.__mapper__


        同樣的MetaData可以通過.metadata屬性找到。

        好啦,下面輕松一下,見證奇跡的時刻,我們需不需要定義創建好實體數據庫然后再定義ORM?對于SQLAlchemy來說這些都是小事一樁,其都可以給你一手包辦,也就是說你可以完全不必理會數據庫,交給SQLAlchemy就可以了,比如通過MetaData.create_all()并將engine參數傳入即可(什么是engine?參考我的筆記1),比如通過下面的方式創建我們的users表。
        代碼如下:


        >>> Base.metadata.create_all(engine)
        PRAGMA table_info("users")
        ()
        CREATE TABLE users (
        id INTEGER NOT NULL,
        name VARCHAR,
        fullname VARCHAR,
        password VARCHAR,
        PRIMARY KEY (id)
        )
        ()
        COMMIT


        由于我們開啟了engine的echo=True,所以在交互命令下SQLAlchemy把SQL語句也輸出了,正好可以檢驗是否符合我們的要求。

        這樣簡單的create_all()我們就輕松建立起先前ORM映射定義的表啦。

        時間不早了,今天先聊到這兒,下次再談SQLAlchemy的其他特性。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        PythonORM框架SQLAlchemy學習筆記之關系映射實例

        PythonORM框架SQLAlchemy學習筆記之關系映射實例:昨天簡單介紹了SQLAlchemy的使用,但是沒有能夠涉及其最精彩的ORM部分,今天我將簡單說明一下,當然主要還是講解官方文檔的內容,由于是學習筆記,有可能存在精簡或者自己理解的部分,不做權威依據。 當我們開始使用ORM,一種可配置的結構可以用于描述我們的
        推薦度:
        標簽: 映射 實例 python
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产成人精品免费视频大| 精品一区二区三区高清免费观看 | 亚洲伊人久久大香线蕉啊| 91av免费观看| 亚洲另类小说图片| 麻豆最新国产剧情AV原创免费| 亚洲国产精品久久久久秋霞影院| 国产h肉在线视频免费观看| 日本亚洲精品色婷婷在线影院| 久久久久久免费视频| 亚洲国产成人91精品| 日本人护士免费xxxx视频| 特a级免费高清黄色片| 国产亚洲精AA在线观看SEE| 91老湿机福利免费体验| 亚洲宅男精品一区在线观看| 四虎成人免费网址在线| 美女被免费网站视频在线| 亚洲色婷婷一区二区三区| 日韩免费人妻AV无码专区蜜桃| 亚洲丰满熟女一区二区v| 免费特级黄毛片在线成人观看| 无码天堂va亚洲va在线va| 亚洲中文字幕第一页在线 | 久久夜色精品国产亚洲| 亚洲精品在线免费观看视频| 亚洲乱码国产乱码精华| 国产亚洲人成A在线V网站| 99热免费在线观看| 亚洲国产精品精华液| 亚洲午夜福利在线观看| 69天堂人成无码麻豆免费视频| 自拍偷自拍亚洲精品偷一| 亚洲av综合av一区| 在线中文高清资源免费观看| 在线看片免费人成视频久网下载| 亚洲欧洲自拍拍偷综合| 亚洲国产中文v高清在线观看| 免费视频爱爱太爽了| 成人嫩草影院免费观看| 亚洲国产精品日韩在线观看|