国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

PythonORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:30:30
文檔

PythonORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例

PythonORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例:昨天簡(jiǎn)單介紹了SQLAlchemy的使用,但是沒(méi)有能夠涉及其最精彩的ORM部分,今天我將簡(jiǎn)單說(shuō)明一下,當(dāng)然主要還是講解官方文檔的內(nèi)容,由于是學(xué)習(xí)筆記,有可能存在精簡(jiǎn)或者自己理解的部分,不做權(quán)威依據(jù)。 當(dāng)我們開始使用ORM,一種可配置的結(jié)構(gòu)可以用于描述我們的
推薦度:
導(dǎo)讀PythonORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例:昨天簡(jiǎn)單介紹了SQLAlchemy的使用,但是沒(méi)有能夠涉及其最精彩的ORM部分,今天我將簡(jiǎn)單說(shuō)明一下,當(dāng)然主要還是講解官方文檔的內(nèi)容,由于是學(xué)習(xí)筆記,有可能存在精簡(jiǎn)或者自己理解的部分,不做權(quán)威依據(jù)。 當(dāng)我們開始使用ORM,一種可配置的結(jié)構(gòu)可以用于描述我們的

昨天簡(jiǎn)單介紹了SQLAlchemy的使用,但是沒(méi)有能夠涉及其最精彩的ORM部分,今天我將簡(jiǎn)單說(shuō)明一下,當(dāng)然主要還是講解官方文檔的內(nèi)容,由于是學(xué)習(xí)筆記,有可能存在精簡(jiǎn)或者自己理解的部分,不做權(quán)威依據(jù)。

當(dāng)我們開始使用ORM,一種可配置的結(jié)構(gòu)可以用于描述我們的數(shù)據(jù)庫(kù)表,稍后我們定義的類將會(huì)被映射到這些表上。當(dāng)然現(xiàn)代的SQLAlchemy(新版本SQLAlchemy,原文是modern SQLAlchemy)使用Declarative把這兩件事一起做了,即允許我們把創(chuàng)建類和描述定義數(shù)據(jù)庫(kù)表以及它們之間的映射關(guān)系一次搞定。

這段話是什么意思呢?簡(jiǎn)單來(lái)說(shuō)吧,SQLAlchemy分為Classic (經(jīng)典模式)和Modern (現(xiàn)代模式),Classic定義數(shù)據(jù)庫(kù)表的模式比較傳統(tǒng),需要先描述這個(gè)表。

1. Classic 映射

比如以官方文檔中的例子,我們擁有表結(jié)構(gòu)如下:
代碼如下:


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))
)


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


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


如何讓我們定義的類與之前描述的表結(jié)構(gòu)發(fā)生映射關(guān)系就是我們接下來(lái)要做的:
代碼如下:


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


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

這就是傳統(tǒng)的定義ORM的方法,有關(guān)這個(gè)方法的更多信息,可以閱讀文檔Mapper Configuration,以后有機(jī)會(huì)再和大家詳談。

2. Modern 映射

當(dāng)大家都樂(lè)此不疲的定義描述表,定義類,再映射來(lái)實(shí)現(xiàn)ORM的時(shí)候,SQLAlchemy團(tuán)隊(duì)搞出了更簡(jiǎn)單的映射方法,那就是Modern模式了,即通過(guò)定義映射類來(lái)一次性完成所有任務(wù)。

為了定義的類能夠被SQLAlchemy管理,所以引入了Declarative這個(gè)概念,也就是說(shuō)我們所有的類必須是Declarative基類的子類,而這個(gè)基類可以通過(guò)下面的辦法來(lái)獲取:
代碼如下:


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


當(dāng)然一個(gè)程序內(nèi),這個(gè)基類最好是唯一的,建議存儲(chǔ)在全局變量比如Base中供所有映射類使用。

現(xiàn)在通過(guò)剛才的代碼我們得到了名為Base的基類,通過(guò)這個(gè)基類我們可以定義N多的映射子類,而這些子類都能被SQLAlchemy Declarative系統(tǒng)管理到。

下面我們還是看剛才的那個(gè)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中需要的三步,代碼比原先更簡(jiǎn)潔和容易管理了,同剛才Classic中Table定義的Column,這個(gè)代表數(shù)據(jù)庫(kù)表中的列,當(dāng)然Integer和String代表著數(shù)據(jù)庫(kù)表的字段類型了。

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

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

當(dāng)然User類唯一不能馬虎的就是必須繼承至Base,這個(gè)Base就是剛才我們通過(guò)declarative_base()生成的類,通過(guò)它我們可以接下來(lái)讓SQLAlchemy Declarative系統(tǒng)管理并操作這些映射類和數(shù)據(jù)庫(kù)表。

實(shí)際上包括繼承的Base類,所有的類都應(yīng)該是Python的新式類(new style class),關(guān)于新式類的更多信息可以參考Python手冊(cè)。

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


>>> 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)


當(dāng)然找到描述表的數(shù)據(jù)結(jié)構(gòu),也應(yīng)該能找到mapper,我們的Mapper對(duì)象可以通過(guò)__mapper__屬性來(lái)獲取,比如這樣的:
代碼如下:


>>> User.__mapper__


同樣的MetaData可以通過(guò).metadata屬性找到。

好啦,下面輕松一下,見證奇跡的時(shí)刻,我們需不需要定義創(chuàng)建好實(shí)體數(shù)據(jù)庫(kù)然后再定義ORM?對(duì)于SQLAlchemy來(lái)說(shuō)這些都是小事一樁,其都可以給你一手包辦,也就是說(shuō)你可以完全不必理會(huì)數(shù)據(jù)庫(kù),交給SQLAlchemy就可以了,比如通過(guò)MetaData.create_all()并將engine參數(shù)傳入即可(什么是engine?參考我的筆記1),比如通過(guò)下面的方式創(chuàng)建我們的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語(yǔ)句也輸出了,正好可以檢驗(yàn)是否符合我們的要求。

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

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

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

PythonORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例

PythonORM框架SQLAlchemy學(xué)習(xí)筆記之關(guān)系映射實(shí)例:昨天簡(jiǎn)單介紹了SQLAlchemy的使用,但是沒(méi)有能夠涉及其最精彩的ORM部分,今天我將簡(jiǎn)單說(shuō)明一下,當(dāng)然主要還是講解官方文檔的內(nèi)容,由于是學(xué)習(xí)筆記,有可能存在精簡(jiǎn)或者自己理解的部分,不做權(quán)威依據(jù)。 當(dāng)我們開始使用ORM,一種可配置的結(jié)構(gòu)可以用于描述我們的
推薦度:
標(biāo)簽: 映射 實(shí)例 python
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 啪啪网站免费观看 | 国产日韩欧美在线播放 | 欧美另类日韩中文色综合 | 精品视频一区二区 | 亚洲第一区在线观看 | 中文国产成人精品久久96 | 国产精品一区二区三 | 欧美日韩综合视频 | 国产成人久久一区二区三区 | 亚洲另类中文字幕 | 九九久久久2 | 欧美影院在线 | 国产福利视精品永久免费 | 五月天婷婷视频 | 亚洲欧美日韩在线2020 | 午夜视频免费观看 | 亚洲国产精品成人综合久久久 | 国产精品网站在线进入 | 欧美精品在线免费 | 国产精品免费观看视频 | 国产中文久久精品 | 中国一级全黄的免费观看 | 国产麻豆精品 | 欧美成人h精品网站 | 国产视频首页 | 中文字幕有码在线观看 | 日韩欧美国产另类 | 交换国产精品视频一区 | 久操视频在线免费观看 | 国产原创一区 | 91久久国产综合精品女同国语 | 亚洲欧洲精品成人久久曰影片 | 国产精品毛片久久久久久久 | 国产欧美日韩精品综合 | 国产aⅴ一区二区三区 | 欧美精品第1页在线播放 | 久久99精品一久久久久久 | 看一级特黄a大片日本片 | 国产视频在 | 亚洲三级在线 | 久久网伊人 |