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:mysql@127.0.0.1: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:tiger@127.0.0.1:1521/sidname
- SQLite (注意開頭的四個斜線):
sqlite:////absolute/path/to/foo.db
常用的SQLAlchemy字段類型
類型名 |
python中類型 |
說明 |
Integer |
int |
普通整數,一般是32位 |
SmallInteger |
int |
取值范圍小的整數,一般是16位 |
BigInteger |
int或long |
不限制精度的整數 |
Float |
float |
浮點數 |
Numeric |
decimal.Decimal |
普通整數,一般是32位 |
String |
str |
變長字符串 |
Text |
str |
變長字符串,對較長或不限長度的字符串做了優化 |
Unicode |
unicode |
變長Unicode字符串 |
UnicodeText |
unicode |
變長Unicode字符串,對較長或不限長度的字符串做了優化 |
Boolean |
bool |
布爾值 |
Date |
datetime.date |
時間 |
Time |
datetime.datetime |
日期和時間 |
LargeBinary |
str |
二進制文件 |
常用的SQLAlchemy列選項
選項名 |
說明 |
primary_key |
如果為True,代表表的主鍵 |
unique |
如果為True,代表這列不允許出現重復的值 |
index |
如果為True,為這列創建索引,提高查詢效率 |
nullable |
如果為True,允許有空值,如果為False,不允許有空值 |
default |
為這列定義默認值 |
常用的SQLAlchemy關系選項
選項名 |
說明 |
backref |
在關系的另一模型中添加反向引用 |
primary join |
明確指定兩個模型之間使用的聯結條件 |
uselist |
如果為False,不使用列表,而使用標量值 |
order_by |
指定關系中記錄的排序方式 |
secondary |
指定多對多關系中關系表的名字 |
secondary join |
在SQLAlchemy中無法自行決定時,指定多對多關系中的二級聯結條件 |