国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

sqlalchemy 學習(一)創建Session和Engine

2019-11-14 11:16:56
字體:
來源:轉載
供稿:網友

基本概念

說到數據庫,就離不開session。Session的主要目的是建立與數據庫的會話,它維護你加載和關聯的所有數據庫對象。它是數據庫查詢(Query)的一個入口。

在Sqlalchemy中,數據庫的查詢操作是通過Query對象來實現的。而Session提供了創建Query對象的接口。

Query對象返回的結果是一組同一映射(Identity Map)對象組成的集合。事實上,集合中的一個對象,對應于數據庫表中的一行(即一條記錄)。所謂同一映射,是指每個對象有一個唯一的ID。如果兩個對象(的引用)ID相同,則認為它們對應的是相同的對象。

要完成數據庫查詢,就需要建立與數據庫的連接。這就需要用到Engine對象。一個Engine可能是關聯一個Session對象,也可能關聯一個數據庫表。

當然Session最重要的功能還是實現原子操作。

創建Session

from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakersome_engine = create_engine('nysql://username:passWord@localhost/mydb?charset=utf8')ession = sessionmaker(bind=some_engine)session = Session()

代碼第4行創建一個Engine對象,我們提供的參數是數據庫連接的url。

代碼第6行通過sessionmaker方法創建了一個Session工廠。

代碼第8行通過調用工廠方法來創建一個Session對象。

Session的生命期

Session通常在我們需要對數據庫進行操作時創建。

一旦一個Session創建成功,我們在這個Session下完成多個事務(transaction)。

究竟何時創建和關閉session,不能一概而論。但是一個原則是session不應該在操作事務的方法中創建。

例如下面的方法定義就是不規范的。

class SomeThing(object):    def go(self):        session = Session()        try:            # Do something            session.commit()        except:            session.rollback()            raise

我們應該做如下改正。

class SomeThing(object):    def go(self, session):        # Do somethingdef run_my_PRogram():    session = Session()    try:        SomeThing().go(session)        session.commit()    except:        session.rollback()        raise    finally:        session.close()


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青田县| 青铜峡市| 酒泉市| 安康市| 双流县| 奉贤区| 英德市| 霍邱县| 琼结县| 柳江县| 博乐市| 清徐县| 明星| 绍兴市| 阿克| 石城县| 田林县| 宝清县| 明光市| 浮山县| 罗山县| 重庆市| 巢湖市| 柳林县| 禹州市| 盐源县| 泰和县| 泸溪县| 昌都县| 庆阳市| 浦北县| 景宁| 沈阳市| 虞城县| 莫力| 仁化县| 潜江市| 兰州市| 平武县| 客服| 澳门|