4 數據庫
知識點
- Flask-SQLALchemy安裝
- 連接數據庫
- 使用數據庫
- 數據庫遷移
- 郵件擴展
4.1 數據庫的設置
Web應用中普遍使用的是關系模型的數據庫,關系型數據庫把所有的數據都存儲在表中,表用來給應用的實體建模,表的列數是固定的,行數是可變的。它使用結構化的查詢語言。關系型數據庫的列定義了表中表示的實體的數據屬性。比如:商品表里有name、price、number等。 Flask本身不限定數據庫的選擇,你可以選擇SQL或NOSQL的任何一種。也可以選擇更方便的SQLALchemy,類似於Django的ORM。SQLALchemy實際上是對數據庫的抽象,讓開發者不用直接和SQL語句打交道,而是通過Python對象來操作數據庫,在舍棄一些性能開銷的同時,換來的是開發效率的較大提升。
SQLAlchemy是一個關系型數據庫框架,它提供了高層的ORM和底層的原生數據庫的操作。flask-sqlalchemy是一個簡化了SQLAlchemy操作的flask擴展。
數據庫安裝
安裝服務端
sudo apt-get install mysql-server
安裝客戶端
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
數據庫的基本命令
登錄數據庫
mysql -u root -p
創建數據庫,並設定編碼
create database <數據庫名> charset=utf8;
顯示所有數據庫
show databases;
在Flask中使用mysql數據庫,需要安裝一個flask-sqlalchemy的擴展。
pip install flask-sqlalchemy
要連接mysql數據庫,仍需要安裝flask-mysqldb
pip install flask-mysqldb
使用Flask-SQLAlchemy管理數據庫
使用Flask-SQLAlchemy擴展操作數據庫,首先需要建立數據庫連接。數據庫連接通過URL指定,而且程序使用的數據庫必須保存到Flask配置對象的SQLALCHEMY_DATABASE_URI鍵中。
對比下Django和Flask中的數據庫設置:
Django的數據庫設置:
Flask的數據庫設置:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test3'
常用的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中無法自行決定時,指定多對多關系中的二級聯結條件 |