Python--ORM框架

# 數(shù)據(jù)庫表是一個二維表, 包含多行多列. 把一個表的內(nèi)容用pyton的數(shù)據(jù)接口表示的話, 可以用list表示多行
# list的每一個元素是tuple, 表示一個記錄.比如id 和name的user表
# [
#     ('1', 'Michael'),
#     ('2', 'Bob'),
#     ('3', 'Adam')
# ]

# Python的DB-API返回的數(shù)據(jù)接口就是像上面這樣.
# 但是用tuple表示一行很難看出表的結(jié)構(gòu).如果把一個tuple用class實例表示, 就可以更容易看出表的結(jié)構(gòu)

# class User(object):
#     def __init__(self, id, name):
#         self.id = id
#         self.name = name

# 這就是傳說中的ORM技術(shù): Object-Relational Mapping, 把關(guān)系數(shù)據(jù)庫的表結(jié)構(gòu)映射到對象上.
# 但是由誰來做這個轉(zhuǎn)換呢, 所以O(shè)RM框架應(yīng)運而生.
# 在Python中, 最有名的ORM框架是SQLAlchemy. 我們來看看SQLAlchemy的用法.

from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    # 表的名字
    __tablename__ = 'user'

    # 表的結(jié)構(gòu)
    id = Column(String(20), primary_key=True)
    name = Column(String(20))

# 初始化數(shù)據(jù)庫連接
engine = create_engine('mysql+mysqlconnector://root:111111@localhost:3306/test')
# 創(chuàng)建DBSession類型
DBSession = sessionmaker(bind=engine)
# create_engine用來初始化數(shù)據(jù)庫連接.
# SQLAlchemy用一個字符串表示連接信息'數(shù)據(jù)庫類型+數(shù)據(jù)庫驅(qū)動名稱://用戶名:口令@機(jī)器地址:端口號/數(shù)據(jù)庫名'

# # 創(chuàng)建session對象:
# session = DBSession()
# # 創(chuàng)建新User對象
# new_user = User(id='5', name='Bob')
# # 添加到session
# session.add(new_user)
# # 提交保存到數(shù)據(jù)庫
# session.commit()
# # 關(guān)閉session
# session.close()

# 可見將關(guān)鍵是獲取session, 然后把對象添加到session, 最后提交并關(guān)閉.(DBSession對象, 可以看做是當(dāng)前數(shù)據(jù)庫的連接)

# 查詢
session = DBSession()
# 創(chuàng)建Query查詢, filter是where條件, 最后調(diào)用one()返回唯一行, 如果調(diào)用all()則返回所有行.
user = session.query(User).filter(User.id=='5').one()
print('type:', type(user))
print('name:', user.name)
session.close()

# ORM就是把數(shù)據(jù)庫表的行與相應(yīng)的對象簡歷關(guān)聯(lián), 互相轉(zhuǎn)換.
# 由于關(guān)系數(shù)據(jù)庫的多個表還可以用外鍵實現(xiàn)一對多, 多對多的關(guān)聯(lián), 相應(yīng)地, ORM框架也可以提供兩個對象之間的一對多, 多對多功能.
# 例如, 如果一個User擁有多個Book, 就可以定義一對多關(guān)系如下
# class User(Base):
#     __tablename__ = 'user'
#
#     id = Column(String(20), primary_key=True)
#     name = Column(String(20))
#     books = relationship('BOOK')
#
# class BOOK(Base):
#     __tablename__ = 'book'
#     id = Column(String(20), primary_key=True)
#     nam = Column(String(20))
#     user_id = Column(String(20), ForeignKey('user.id'))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甲葬,隨后出現(xiàn)的幾起案子技羔,更是在濱河造成了極大的恐慌毛秘,老刑警劉巖耳高,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件传蹈,死亡現(xiàn)場離奇詭異寝并,居然都是意外死亡羊苟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門爱态,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谭贪,“玉大人,你說我怎么就攤上這事肢藐」屎樱” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵吆豹,是天一觀的道長鱼的。 經(jīng)常有香客問我,道長痘煤,這世上最難降的妖魔是什么凑阶? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮衷快,結(jié)果婚禮上宙橱,老公的妹妹穿的比我還像新娘。我一直安慰自己蘸拔,他們只是感情好师郑,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著调窍,像睡著了一般宝冕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邓萨,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天地梨,我揣著相機(jī)與錄音,去河邊找鬼缔恳。 笑死宝剖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歉甚。 我是一名探鬼主播万细,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纸泄!你這毒婦竟也來了雅镊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤刃滓,失蹤者是張志新(化名)和其女友劉穎仁烹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咧虎,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡卓缰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砰诵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片征唬。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茁彭,靈堂內(nèi)的尸體忽然破棺而出总寒,到底是詐尸還是另有隱情,我是刑警寧澤理肺,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布摄闸,位于F島的核電站善镰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏年枕。R本人自食惡果不足惜炫欺,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熏兄。 院中可真熱鬧品洛,春花似錦、人聲如沸摩桶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硝清。三九已至辅斟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耍缴,已是汗流浹背砾肺。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留防嗡,地道東北人变汪。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像蚁趁,于是被迫代替她去往敵國和親裙盾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容