SQlALchemy session詳解

系列文章:

概念

session用於創建程序和數據庫之間的會話,所有對象的載入和保存都需通過session對象 。

通過sessionmaker調用創建一個工廠,並關聯Engine以確保每個session都可以使用該Engine連接資源:

from sqlalchemy.orm import sessionmaker

# 創建session
DbSession = sessionmaker(bind=engine)
session = DbSession()

操作

session的常見操作方法包括:

  1. flush:預提交,提交到數據庫文件,還未寫入數據庫文件中
  2. commit:提交了一個事務,把內存的數據直接寫入數據庫
  3. rollback:回滾
  4. close:關閉

在事務處理時,需注意一下兩點:

  1. 在事務處理過程發生異常時,進行rollback操作,否則會在下次操作時報錯:
Can’t reconnect until invalid transaction is rolled back 
  1. 一般情況下,在一個事務處理完成之後要關閉session,以確保數據操作的準確性。

建議封裝上下文方法:

from contextlib import contextmanager

@contextmanager
def session_maker(session=session):
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()

調用:

def update_user():
    with session_maker() as db_session:
        db_session.query(Users).filter_by(name='test2').update({'email': 'test2@qq.com'})

線程安全

session不是線程安全的,並且我們一般session對象都是全局的,那麼在多線程情況下,當多個線程共享一個session時,數據處理就會發生錯誤。

為了保證線程安全,需使用scoped_session方法:

db_session = scoped_session(sessionmaker(bind=engine))

內部原理

session對象包含了三個重要的部分:

  1. 標識映射(Identity Map)
  2. 對象的狀態 / 狀態跟蹤
  3. 事務

標識映射

標識映射是與ORM關聯的集合,通過標識映射保證了數據庫操作的準確性。

具體的實現原理是:維護一個Python字典(IdentityMap),關聯這個Session對象到數據庫ID的映射,當應用程序想要獲取一個session對象時,若該對象不存在,標識映射會加載該對象並緩存,若該對象已存在,則直接獲取。這樣的好處是:

  1. 已經被請求過的session對象緩存下來,不需要連接加載多次,造成額外的開銷;
  2. 避免了數據不一致

狀態跟蹤

一個Session對象從創建到銷毀,依次經歷四種狀態,分別是:

  1. Transient:剛new出來的對象,還不在會話中,也沒有保存到數據庫。
  2. Pending:transient的對象調用add后,就會變成pending狀態,這時會加入sqlalchemy的監管範圍,數據並未更新到數據庫。
  3. Persistent:該狀態表明數據庫里已經記錄了該對象,在兩種情況下對象處於該狀態:一是通過flush()方法刷新pending對象,二是從數據庫query()得到對象。
  4. Detached:在會話中的事務提交之後,所有的對象都將是Detached狀態。

所謂的狀態跟蹤,就是跟蹤以上四個狀態,保證數據的準確性並在合理的時機丟棄對象以保證合理開銷,那麼具體是怎麼實現的呢?

我們可以看到,只有在pending狀態時,對象的內存數據和數據庫中的數據不一致,在Persistent狀態時,內存數據和數據庫數據已經一致,那麼此後任意時刻丟棄該對象數據都是可以的,這時就需要找個合適的時機丟棄對象,過早或過晚都有其缺陷。於是,就讓垃圾回收器來做決定,在內存不夠的時候釋放對象,回收內存。

Session對象採用了弱引用機制,所謂弱引用,就是說,在保存了對象的引用的情況下,對象仍然可能被垃圾回收器回收。在某一時刻通過引用訪問對象時,對象可能存在也可能不存在,如果對象不存在,就重新從數據庫中加載對象。而如果不希望對象被回收,只需要另外保存一個對象的強引用即可 。

session對象包括三個屬性:

  1. new:剛加入會話的對象
  2. dirty:剛被修改的對象
  3. deleted:在會話中被刪除的對象

三個屬性共同的特點就是內存的數據和數據庫數據不一致,也就是對象處於pending狀態,這也就表明了session保存了所有對象處於pending狀態的強引用。

以上。

代碼可參照:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

中石油與一汽將共同探索互聯網汽車及新能源汽車合作

1月7日,中石油集團與中國第一汽車集團公司在北京簽署戰略合作協定,雙方宣佈共同探索在互聯網汽車及新能源汽車領域的合作,通過雙方的產研優勢,加強新能源汽車研發製造和應用推廣。

雙方一致認為,加大互聯網汽車應用、節能減排和車用新能源推廣是國有骨幹企業社會責任的具體體現,為此,中石油集團將與一汽集團開展互聯網汽車及新能源汽車領域的合作,包括充電業務在加油站的試點和推廣。中石油集團將在重點城區及高速公路新建或增設電動車充電站及天然氣加氣站,在產業鏈上支持一汽集團新能源汽車研發製造和應用推廣。

達成戰略合作夥伴關係後,雙方將建立聯合實驗室,加大潤滑油後續產品研發力度,探討成立符合中國國情和發動機要求的內燃機油品規格。根據一汽集團全系列車型,針對性開發長壽命潤滑油產品,推動技術進步,提升中國自主品牌汽車和潤滑油在國際上的產品競爭力。

此外,中石油將依託加油站“人•車•生活”驛站的定位功能,為一汽旗下車輛量身定制專屬汽車後市場服務產品,充分發揮自身的網路優勢。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

通用發佈全新雪佛蘭Bolt純電動汽車

通用近日發佈了全新雪佛蘭Bolt純電動汽車,這是一款廉價、長距離電動車,計畫於今年晚些時候批量生產。

通用汽車稱,新款雪佛蘭Bolt最大續航里程可達到200英里(約合320公里),售價約為3.8萬美元。扣除7500美元的政府補貼後,售價約3萬美元。

據悉,通用汽車幾年前曾推出短程雪佛蘭Bolt電動汽車,但市場反應欠佳。此次發佈新款雪佛蘭Bolt意味著通用汽車重返電動汽車市場,並希望贏得更廣泛的消費者。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

蝗蟲肆虐25年來最慘 索馬利亞宣布進入「國家緊急狀態」

摘錄自2020年2月3日中時電子報報導

位於東非的國家索馬利亞(Somalia)受到蝗蟲肆虐,已摧毀了10萬公頃的農地和牧場,索馬利亞於當地時間1日宣布進入「國家緊急狀態」,要在最大造成損失之前做準備。

據《美國之音》報導,索馬利亞農業和灌溉部長艾德(Hussein Iid)表示,由於蝗災,國內本來就很脆弱的糧食安全狀況,現在更是受到嚴重威脅。他指出,去年12月第一批蝗災已摧毀了10萬公頃的農地和牧場,並提出警告第二批蝗災的破壞性將更強。

據《BBS》報導,外界認為索馬利亞的蝗災無法在4月農地開始收獲前控制住,聯合國則稱此次蝗災是索國和鄰國衣索比亞(Ethiopia)25年來最嚴重的一次,對鄰國肯亞(Kenya)而言,更是70年以來首見。聯合國糧食及農業組織(FAO)警告,6月時,索馬利亞的蝗蟲數量可能會增加到500倍。

報導指出,蝗蟲1天可以飛行150公里,在2019年底的大雨之後,一大批蝗蟲從葉門(Yemen)穿過紅海來到東非繁衍;12月時,蝗蟲甚至迫使一架飛機偏離航道。雖然機過測試,以無人機噴藥方式可對抗蝗災,但因為索馬利亞的政局不穩定,所以無法實行。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

英要建最大發電站 遭環團上訴阻止

摘錄自2020年02月02日台灣醒報英國報導

英國政府日前批准歐洲最大天然氣發電站的興建計畫,但旋即遭環團上訴,因此被迫暫時停工。非政府組織「ClientEarth」為了阻止德拉克斯集團將其現有的德拉克斯發電站擴建成全歐洲最大的燃氣發電站,日前向英國最高法院申請司法審查,而高院已同意審理此案,預計在2~3個月後開庭審理。

根據英國《獨立報》報導,能源公司德拉克斯集團原本計劃要在現有的德拉克斯發電站新增天然氣發電機組。若增建完成並全面運轉後,將提供3.6京瓦的電力,成為歐洲最大的天然氣發電站。相關訊息顯示,環評專家當時認為此一發電站很有可能會讓英國政府無法在自身的碳排放規劃上達標,也很容易因為未來的減排趨勢而不得不停工,並不符合效益成本,因此建議政府不要批准。

「ClientEarth」的要求目前已經被高院接受,高院預計將在兩個月後開庭審理,德拉克斯的擴建計畫也因此暫時喊停。由於 「ClientEarth」過去也曾因為空汙問題三度成功控訴英國政府,且德拉克斯發電站計畫明顯與英國政府的氣候變遷政策相違背,因此這次的上訴也很有可能獲得成功。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

澳洲伐林導致棲地減少 數十無尾熊遭安樂死

摘錄自2020年2月3日中央社報導

澳洲無尾熊的棲地遭到砍伐,導致數十隻無尾熊被施以安樂死,約80隻因受傷和挨餓接受治療,澳洲政府將介入調查。

維多利亞州(Victoria)環境廳表示,州保育當局正在鄰近海岸城鎮波特蘭(Portland)的藍膠林場調查導致數十隻無尾熊死亡的「令人痛苦事件」。那些該負責的人,會依據澳洲保護野生動物法處以高額罰款。

環境部表示,週末期間已有約80隻無尾熊被帶出林場接受醫療,其他無尾熊則不得不遭到安樂死。環保組織「地球之友」(Friends of the Earth)表示,這片林地是在去年12月遭砍伐。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

Tesla Model 3 搶 2017年上市,Panasonic將供首批鋰電池

特斯拉(Tesla)大眾款電動車Model 3 預計將在2017年上市,且首批車用鋰電池將來自與Panasonic合資在美國內華達州設立的Gigafactory超大電池工廠。換句話說,Model 3初期所有鋰電池都將由Panasonic供應。

根據日經新聞報導,2015年美國電動車銷量(含純電與PHEV)銷量因油價下跌而減少了5%左右,但Tesla的銷量卻憑藉著品牌優勢逆勢走揚,打敗Nissan成為市佔冠軍,市佔率來到22。據統計,Model S在美國市場的年銷量成長了49%來到25,700輛,但Nissan Leaf卻下跌了43%來到17,269輛。

Model 3起價為35,000美元,約為Model S的一半,主要客群為一般大眾,最大連續行駛里程200英里。根據汽車資訊服務商AutoData與汽車網站Hybridcars.com的綜合整理,Tesla到2015年11月止已累計9.94萬輛電動車銷量,且2015年12月單月賣出了3,300輛電動車,整體銷量應已突破十萬。此一銷售數字在Model 3上市後可能還會大幅成長。

在Tesla後市看好的情況下,負責提供車用鋰電池的Panasonic未來一、兩年間的鋰電池業績展望也跟著水漲船高。Panasonic日前也宣布將在中國成立車用鋰電池生產工廠,繼續搶入電動車電池的供應鏈。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

香港將試行36輛單層電動巴士

香港特首在最新的施政報告中指出,由於電動車有助環保與能源改革,未來將更加普及,因此香港也將持續增加電動巴士,今年預計試行36輛單層電動巴。

香港媒體報導,香港電動車掛牌行駛數量已由2010年約100量增加至現在的接近4,000輛。呼應北京政府的相關政策,香港政府也將在公共交通方面推動電動車的使用與發展,首先將與專營巴士公司合作,在香港試採行36輛單層電動巴士。

同時,香港政府也會提升公共電動車充電樁的充電效能,並協助物業管理公司增設充電設施。目前全港有超過1,200座公共充電樁,其中包含200座中速充電設備。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※南投搬家前需注意的眉眉角角,別等搬了再說!

2016中國(重慶)國際新能源汽車/電動車展覽會

http:

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

2016中國(北京)國際新能源汽車暨電動車展覽會

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益