Flask-ORM

ORM

  • ORM 全拼Object-Relation Mapping.
  • 中文意爲 對象-關係映射.
  • 主要實現模型對象到關係數據庫數據的映射.

    • 比如:把數據庫表中每條記錄映射爲一個模型對象

ORM圖解

優點 :

  • 只需要面向對象編程, 不需要面向數據庫編寫代碼.
    • 對數據庫的操作都轉化成對類屬性和方法的操作.
    • 不用編寫各種數據庫的sql語句.
  • 實現了數據模型與數據庫的解耦, 屏蔽了不同數據庫操作上的差異.
    • 不在關注用的是mysqloracle...等.
    • 通過簡單的配置就可以輕鬆更換數據庫, 而不需要修改代碼.

缺點 :

  • 相比較直接使用SQL語句操作數據庫,有性能損失.
  • 根據對象的操作轉換成SQL語句,根據查詢的結果轉化成對象, 在映射過程中有性能損失.

Flask-SQLAlchemy安裝及設置

  • SQLALchemy 實際上是對數據庫的抽象,讓開發者不用直接和 SQL 語句打交道,而是通過 Python 對象來操作數據庫,在捨棄一些性能開銷的同時,換來的是開發效率的較大提升
  • SQLAlchemy是一個關係型數據庫框架,它提供了高層的 ORM 和底層的原生數據庫的操作。flask-sqlalchemy 是一個簡化了 SQLAlchemy 操作的flask擴展。
  • 文檔地址:http://docs.jinkan.org/docs/flask-sqlalchemy

安裝

  • 安裝 flask-sqlalchemy
pip install flask-sqlalchemy
  • 如果連接的是 mysql 數據庫,需要安裝 mysqldb
pip install flask-mysqldb

數據庫連接設置

  • 在 Flask-SQLAlchemy 中,數據庫使用URL指定,而且程序使用的數據庫必須保存到Flask配置對象的 SQLALCHEMY_DATABASE_URI 鍵中
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/test'
  • 其他設置:
# 動態追蹤修改設置,如未設置只會提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#查詢時會顯示原始SQL語句
app.config['SQLALCHEMY_ECHO'] = True
  • 配置完成需要去 MySQL 中創建項目所使用的數據庫
$ mysql -uroot -pmysql
$ create database test charset utf8;
  • 其他配置
名字備註
SQLALCHEMY_DATABASE_URI用於連接的數據庫 URI 。例如:sqlite:////tmp/test.dbmysql://username:password@server/db
SQLALCHEMY_BINDS一個映射 binds 到連接 URI 的字典。更多 binds 的信息見用 Binds 操作多個數據庫
SQLALCHEMY_ECHO如果設置爲Ture, SQLAlchemy 會記錄所有 發給 stderr 的語句,這對調試有用。(打印sql語句)
SQLALCHEMY_RECORD_QUERIES可以用於顯式地禁用或啓用查詢記錄。查詢記錄 在調試或測試模式自動啓用。更多信息見get_debug_queries()。
SQLALCHEMY_NATIVE_UNICODE可以用於顯式禁用原生 unicode 支持。當使用 不合適的指定無編碼的數據庫默認值時,這對於 一些數據庫適配器是必須的(比如 Ubuntu 上 某些版本的 PostgreSQL )。
SQLALCHEMY_POOL_SIZE數據庫連接池的大小。默認是引擎默認值(通常 是 5 )
SQLALCHEMY_POOL_TIMEOUT設定連接池的連接超時時間。默認是 10 。
SQLALCHEMY_POOL_RECYCLE多少秒後自動回收連接。這對 MySQL 是必要的, 它默認移除閒置多於 8 小時的連接。注意如果 使用了 MySQL , Flask-SQLALchemy 自動設定 這個值爲 2 小時。

連接其他數據庫

完整連接 URI 列表請跳轉到 SQLAlchemy 下面的文檔 (Supported Databases) 。這裏給出一些 常見的連接字符串。

  • Postgres:
postgresql://scott:tiger@localhost/mydatabase
  • MySQL:
mysql://scott:tiger@localhost/mydatabase
  • Oracle:
- oracle://scott:[email protected]:1521/sidname
  • SQLite (注意開頭的四個斜線):
sqlite:////absolute/path/to/foo.db

常用的SQLAlchemy字段類型

類型名python中類型說明
Integerint普通整數,一般是32位
SmallIntegerint取值範圍小的整數,一般是16位
BigIntegerint或long不限制精度的整數
Floatfloat浮點數
Numericdecimal.Decimal普通整數,一般是32位
Stringstr變長字符串
Textstr變長字符串,對較長或不限長度的字符串做了優化
Unicodeunicode變長Unicode字符串
UnicodeTextunicode變長Unicode字符串,對較長或不限長度的字符串做了優化
Booleanbool布爾值
Datedatetime.date時間
Timedatetime.datetime日期和時間
LargeBinarystr二進制文件

常用的SQLAlchemy列選項

選項名說明
primary_key如果爲True,代表表的主鍵
unique如果爲True,代表這列不允許出現重複的值
index如果爲True,爲這列創建索引,提高查詢效率
nullable如果爲True,允許有空值,如果爲False,不允許有空值
default爲這列定義默認值

常用的SQLAlchemy關係選項

選項名說明
backref在關係的另一模型中添加反向引用
primary join明確指定兩個模型之間使用的聯結條件
uselist如果爲False,不使用列表,而使用標量值
order_by指定關係中記錄的排序方式
secondary指定多對多關係中關係表的名字
secondary join在SQLAlchemy中無法自行決定時,指定多對多關係中的二級聯結條件





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章