国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SQLAlchemy介紹——OpenStack的數據庫開發基礎

云計算 OpenStack
OpenStack 做為一個完全使用 Python 開發的項目,利用已有的豐富模塊是開發時重要的中心思想之一,同時為了便于整個社區幾百名背景不同水平不同的開發者協作,最終選擇了 SQLAlchemy 和 Alembic 作為數據庫開發的基礎。

前言

對于一個業務系統,如何高效、平穩地使用數據庫是每一個開發人員都會遇到的問題,OpenStack 也不例外,以 OpenStack 的虛擬網絡組件 Neutron 為例,其數據庫涉及幾百張表,需要維護數據庫版本近百;一些表因為設計原因形成了很高的“熱點”;因為 OpenStack 是分布式的,需要以***小一點的代價保證操作時的一致性……最重要的是,每個人的數據庫水平都不一樣,怎么保證整個開源社區數百名提交者有一樣的數據庫操 作風格,如何維護這些代碼?

OpenStack 做為一個完全使用 Python 開發的項目,利用已有的豐富模塊是開發時重要的中心思想之一,同時為了便于整個社區幾百名背景不同水平不同的開發者協作,最終選擇了 SQLAlchemy 和 Alembic 作為數據庫開發的基礎。

Why SQLAlchemy

在回答為什么使用 SQLAlchemy 之前,我們先盤點一下目前 Python 能用的 ORM 庫,因為挑一個庫在很大程度上實在挑社區,所以我把***版的 release 時間也寫出來:

Storm:***版 0.20,release 于 2013 年,開發已經比較沉寂……對外鍵的更新、刪除要求比較奇怪。

SQLObject:***版 1.7.3,release 于 2014.12.18,開發歷史久,目前活躍度不是很高。

Django’s ORM:來自于 Django,Django 內置,使用 Django 開發的話會很方便,但它不能脫離 Django 運行,也不能處理一些復雜的請求。

peewee:***版 2.4.4 發布于2014.12.3,輕量方便,內置 SQLite、MySQL和PostgreSQL的支持。

PonyORM:***版 0.6,release 于 2014.11.5。使用 AGPL 許可。有圖形化的編輯器。非為大型應用設計。

SQLAlchemy:***版 0.9.8,release 于 2014.10.13,企業級 API,設計靈活。加入了一些自己的概念,學習曲線較高。

總結一下,Storm 曾經應用比較廣泛,但現在社區不再活躍,很難保證將來遇到問題能否交給社區解決,而且 Storm 對數據庫架構同步處理的比較奇怪,還有頻繁產生 DDL 操作 造成庫級鎖這些問題無法讓人放心;SQLObject 也是一個很出名的 ORM 庫,但與 SQLAlchemy 相比,后者效率更高,對一些高級特性的支持不如后者。

SQLAlchemy 的架構

Summary

SQLAlchemy 很有特色的一點就是它刻意被分為另種用法,就是 CORE 和 ORM,這是由它的架構決定的。

 

 

這樣的架構的好處是帶來了 Core 與 ORM 的解耦和,當我們需要高性能的 SQL 執行但又不想拋棄 SQLAlchemy 帶來的session管理、連接池管理、數據庫“中立”的語句編寫等這些好處時我們可以直接用 CORE。直接用 CORE 是什么意思呢?我們看到架構里只有Rational Mapper在 CORE 之上,實際也確實如此,因為Schema、SQL Expression Language還在 CORE 內,所以使用 CORE 可以直接寫純 SQL 語句,我們稱之為Raw SQL的寫法,也可以用SQL Expression,后者因為是相當于寫 Python 代碼,所以可以帶來更好地閱讀性和可維護性,不過Raw SQL更靈活,所以在很復雜的語句面前Raw SQL就更占優勢了。

再往下看這個圖,我們可以看到 DBAPI 是由Third party libraries實現的,也就是說 SQLAlchemy 并沒有提供直接連接數據庫的功能,而是通過第三方實現:

 

 

SQLalchemy 對dialect支持很全,就以常見的 MySQL 為例,可以支持:MySQL-Python、OurSQL、PyMySQL、MySQL Connector/Python、CyMySQL、Google Cloud SQL、PyODBC、zxjdbc for Jython,具體可以在 SQAlchemy 的dialects頁面里查到。

這樣有什么壞處呢,最明顯的就是低效。因為傳統 Python 解釋器 CPython 的實現原因(主要是 C 的問題)長的函數調用棧會帶來顯著地性能問題。 由于路徑過長,不可避免地導致運行時的緩慢。SQLAlchemy 花了很舊去縮短調用路徑和通過 C 代碼處理性能瓶頸,效果還不錯,不過***還是希望 PyPy 能夠廣泛流行起來,通過JIT緩解這個問題。

Engine

上面的圖還是一張抽象程度比較高的,下面我細節點的介紹下 SQLAlchemy 的Engine。

 

 

對于使用者來說,Engine是核心,因為Connection、 ResultProxy這些都是在Engine之后生成的,建立Engine則有兩個重點,就是Pool和Dialect,前者是做連接池管理,后者則負 責與 DBAPI 的溝通,如同其名字所示,負責“方言”與“普通話”的翻譯。上圖是以psycopg2為例的,使用 MySQL(PyODBC)也是類似的。

 

 

通過Dialect和ExecutionContext向開發者提供了一致的接 口,前者處理了數據庫的特性,比如使用 PostgreSQL 數據庫其 Array 數據類型、schema、catalog等,后者處理psycopg2 DBAPI 的用法,比如 unicode 字符處理、服務端 cursor 的行為這些。

所以說,DBAPI中的cursor在 SQLAlchemy 中會被包裝成ExecutionContext和ResultProxy來使用的。

Schema

當數據庫的連接和交互處理完了,下一步就是提供非特定的表、字段的建立和操作方法。我們需要首先定義在數據庫中的表和字段的定義,及他們之間的關系, 也就是 Schema。對于數據庫的使用來說,最基本的至少要有兩個元素,那就是Table和Column,SQLAlchemy 使用了這兩個名字來描述表和字段。多個Column組合成Table,然后一些 Table構成MetaData。Schema的結構設計主要來自于 Martin Fowler 撰寫的 Patterns of Enterprise Application Architecture。

 

此外,Table和Column同時繼承自sqlalchemy.schema 和sqlalchemy.sql,使用時既可以在 ORM 的方式中使用,也可以以 SQL Expression Language 使用。在下圖中我們可以看到Table從sqlalchemy.sql中“可以select from”的類繼承,Coloumn從“可以用在 SQL expression”的類繼承。

 

 

 

表達式樹

SQLAlchemy 可以生成結構豐富的各種語句,這是一個詞法分析樹,核心結構是ClauseElement。

 

在 Python 中,得益于其 Magic Method,我們可以用__eq__、__ne__、__le__、__lt__、__add__、__mul__方便的重載運算符。以 Column 為對象的運算符由一個 mixin 類ColumnOperators實現重載。

編譯

在這里,編譯指生成 SQL 語句,主要由Compiled類完成,這個類有兩個核心的子類,SQLComplier和DDLCompiler。SQLComplier負責像 SELECT、INSERT、UPDATE、DELETE這些統稱為DQL (data query language) 和 DML (data manipulation language)的操作符的渲染,DDLCompiler負責CREATE和DROP,一般稱為 DDL。此外,還有一個類TypeCompiler處理某些數據庫的特殊語法。

 

 

Compiled的子類定以了一系列的 visit 開頭的方法,每一個都源于一個ClauseElement的特定子類。然后Compiled對象維護名字、結合參數和子查詢,最終是為了生成一個 SQL 查詢語句。

 

 

Migration

我們希望能像管理代碼一樣管理數據庫,可以像 git 一樣給數據庫定義版本、升/降級、打標簽,可以么?答案就是 Alembic。

Alembic 的作者與 SQLAlchemy 是同一人,使用起來有點像簡化版的 git,在 db 目錄里執行 init,就可以自動生成基本結構和配置文件。配置妥當后使用 alembic 可以生成一個數據庫模版,作為這個“版本”的數據升/降級文件,SQLAlchemy 會自動生成其“版本號”和歷史關系我們所需要做的便只是用調用 SQLAlchemy 和 Alembic 提供的 sa 和 op 定義數據庫表即可。

有同學可能問我在 SQLAlchemy 上做過一模一樣的定義了,是不是能不要讓我重復勞動啊?或者在我給 SQLAlchemy 做完修改后 Alembic 能不能自動“感知”到這些修改然后自己生成版本文件啊?答案是可以的,配置好元數據來源后,Alembic 可以用–autogenerate自動生成相應的版本文件。

原文鏈接:https://www.ustack.com/blog/sqlalchemy/

責任編輯:Ophira 來源: 優思得云計算
相關推薦

2014-12-29 10:29:40

OpenStack數據庫SQLAlchem

2011-02-25 09:37:35

2011-03-21 13:21:23

數據庫開發規范

2016-09-23 13:34:15

PythonORMsqlalchemy

2010-05-25 14:50:25

MySQL 數據庫

2024-04-03 10:05:02

2009-10-28 17:24:19

VB.NET介紹

2010-04-26 09:28:43

Oracle數據庫

2011-03-17 14:51:33

數據庫自我調整

2011-04-14 09:27:37

內存數據庫

2010-04-15 13:01:25

Oracel數據庫

2009-03-19 09:53:11

pureXMLXML關系數據庫

2023-10-26 07:05:58

MySQL數據庫

2021-08-19 07:25:02

數據庫Flask插件

2011-04-07 14:50:21

SQL Server數據庫

2015-07-17 16:49:13

OpenStack開源云平臺云計算

2011-07-29 13:17:58

SQL Server Analysis Se

2015-10-28 17:39:04

ORACLE AIO異步IO

2009-07-01 11:08:14

JSP DestoryJSP Init數據庫鏈接

2011-02-28 15:45:12

點贊
收藏

51CTO技術棧公眾號

久久99国产精品视频| 国产一精品一av一免费爽爽| 大胆亚洲人体视频| 精品成在人线av无码免费看| 秋霞国产精品| 欧美精品tushy高清| 男女免费观看在线爽爽爽视频| 日韩免费看网站| 日本一区影院| 欧美不卡三区| 综合久久久久久| 97天天综合网| 国模精品系列视频| 日韩成人伦理电影在线观看| 熟女人妇 成熟妇女系列视频| 欧美性猛交xxxx乱大交3| 午夜精品成人av| 成人av在线网址| 国产成人激情av| a天堂中文在线88| 91成人精品网站| 99精品一区二区| 777电影在线观看| 国产精品jizz在线观看麻豆| 一区二区激情| 三区在线观看| 国内精品视频久久| 国产成人av一区二区| 91社区在线观看| 国产综合视频在线观看| 高清不卡一区二区| av观看在线| 成人免费视频在线观看超级碰| 99精品视频在线观看| av中文字幕在线观看| 亚洲影影院av| 在线精品视频免费观看| 日韩精品2区| 国产精彩免费视频| 九九九久久久久久| 久久久99精品免费观看不卡| 91国拍精品国产粉嫩亚洲一区| 91久久综合亚洲鲁鲁五月天| 亚洲精品videosex极品| 久久综合色占| 中文字幕在线影视资源| 国产精品久久久久9999| 1区2区3区精品视频| 成人亚洲精品| 成人免费观看在线| 国产亚洲人成a一在线v站| 黄色日韩在线| 国产高清在线a视频大全 | 成人三级网址| 中文字幕综合在线观看| 亚洲大尺度美女在线| 欧美videos粗暴| 欧美高清性xxxxhdvideosex| 亚洲欧洲av在线| 嗯用力啊快一点好舒服小柔久久| 最近中文字幕一区二区| 日本不卡免费高清视频| 91免费看`日韩一区二区| 国产精品毛片aⅴ一区二区三区| a级黄色一级片| 欧美理论电影在线观看| 国产在线精品不卡| 女同一区二区三区| 欧美日韩在线看片| 亚洲精品美女久久7777777| 日韩亚洲一区二区| 一区二区三区高清视频在线观看| 一区二区亚洲精品国产| 成人激情综合网站| 精品亚洲成人| caoporn视频在线| 日本最黄视频| 欧美福利一区二区三区| 精品成人佐山爱一区二区| 成人av资源在线| 1024精品久久久久久久久| 亚洲承认视频| 日本福利片在线| 性猛交ⅹ×××乱大交| 日韩色妇久久av| 久久久久免费视频| 亚洲第一视频网| 日本一二三不卡| 久久激情五月婷婷| 午夜久久美女| 日韩av黄色| 成年人视频网站在线| 尤蜜粉嫩av国产一区二区三区| 国产在线一区二区三区播放| 欧美一级大片在线免费观看| 日韩成人中文字幕| 欧美系列亚洲系列| 国产精品国产a级| 91久色porny| 欧美午夜视频| 久久久久久久久国产一区| 国产一区二区三区亚洲| 久久久久久亚洲精品美女| 变态调教一区二区三区| 国产婷婷视频在线| 中文字幕第5页| av手机免费观看| 天天干天天综合| v888av成人| 免费白浆视频| 中文在线√天堂| 福利h视频在线| 少妇**av毛片在线看| 国产一区二区在线视频播放| 精品视频免费在线播放| 91蝌蚪视频在线观看| 国产91精品青草社区| 青青草原综合久久大伊人精品优势| 第一sis亚洲原创| 午夜日韩影院| 99久久婷婷国产综合精品青牛牛 | 国产精品爽爽ⅴa在线观看| 国产69精品久久久久9| 国内精品久久久久久中文字幕| 久久网福利资源网站| 色系列之999| 热久久美女精品天天吊色| 91精品国产自产在线观看永久| 成人美女免费网站视频| 青青草成人网| 久久久久久www| 三上悠亚在线观看二区| 在线视频1区2区| 免费成人在线电影| 日韩美女在线| 欧美一级一片| 久久这里有精品15一区二区三区| 蜜桃伊人久久| 91麻豆国产在线观看| 狠狠久久亚洲欧美专区| 亚洲精品国产精品乱码不99按摩| 美女av一区二区| 精品对白一区国产伦| 欧美成人合集magnet| 99久久精品无码一区二区毛片| 国产精品h视频| 色在线免费视频| 精品视频在线观看免费观看| 欧美大黑bbbbbbbbb在线| 久久精品99国产精品日本| 久久精品水蜜桃av综合天堂| 欧美亚洲日本一区| 精品丝袜一区二区三区| 日韩美女写真福利在线观看| 久久久水蜜桃| 午夜影院在线免费观看| 欧美欧美在线| 男人的天堂久久精品| 欧美日韩色婷婷| 欧美激情精品久久久久久免费印度| 久久久久久99| 中文字幕一区二区三区免费视频| 青青草在线播放| 黄色欧美网站| 91免费视频网| 亚洲欧美一区二区三区久久| 成人av免费在线看| 成人看片app| 欧美日本三级| 午夜综合激情| 欧美丰满美乳xxx高潮www| 日韩在线视频网站| 正在播放精油久久| 成人ww免费完整版在线观看| 欧美1级日本1级| 一本色道久久综合狠狠躁的推荐 | wwwww在线观看免费视频| 日韩欧美1区| 亚洲色图欧洲色图婷婷| 丝袜亚洲另类丝袜在线| 亚洲一区二区三区四区五区黄| 欧美日韩国产电影| 久久精品中文字幕一区二区三区| 国产精品一级伦理| 黄色av一区| 精品国产一区二区精华| 老司机午夜网站| 国产日韩一区二区三免费高清| 91麻豆文化传媒在线观看| 欧美日韩国产第一页| 高清国语自产在线观看| 91亚洲国产高清| 538在线一区二区精品国产| 女人一区二区三区| www.久久热.com| 日韩av高清在线观看| 日韩女优制服丝袜电影| 在线亚洲欧美专区二区| 国产精品吹潮在线观看| 国语对白在线刺激|