Python Flask - 使用 Flask SQLAlchemy 建立資料庫
前言
flask提供flask sqlalchemy套件讓開發人員可以更容易操控資料庫各項指令,除了支持MySQL等資料庫以外,可以直接使用SQLite,讓開發人員快速上手(is me 👋🏼),使用flask sqlalchemy時仍有一部分需要特別注意的小問題🤦🏻,我們也使用flask內建的flask shell驗證我們的資料庫
安裝與使用flask-sqlachemy
安裝flask-sqlachemy
1
pip install flask-sqlalchemy
引入flask-bootstrap並實體化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 設定資料庫儲存位置 "sqlite:///" + "位置"
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.sqlite'
# .
# ├── app.py
# └── instance
# └── database.sqlite
# e.g. /tmp/database.sqlite
# app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/database.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 減少使用額外記憶體
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
# 設定id為primary key
username = db.Column(db.String(20), unique=True, nullable=False)
# 設定username為string type, 長度最多20, unique: 不可重複, nullable: 不可空值
password = db.Column(db.String(20), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'⚠️ 使用flask-sqlalchemy前必須要先設定
app.config[‘SQLALCHEMY_DATABASE_URI’] , 否則會報錯誤訊息:RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.使用flask shell存取db(database), User(table)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19flask shell # 開啟 flask shell
from app import db, User # 引入db(database)及User(table)
db.create_all() # 建立db
User.query.all() # [], 因此時無資料
u1 = User(username="mu", password="pwd", email="mu@gmail.com") # 新增User
u1 # <User mu>
u1.username # 'mu'
u1.password # 'pwd'
u1.email # 'mu@gmail.com'
db.session.add(u1) # 新增u1至db
db.session.commit() # 儲存至db
User.query.all() # [<User mu>]
User.query.filter_by(username='mu').first() # <User mu>, 條件查詢⚠️ 新增資料前必須先執行
db.create_all() 建立資料庫,否則無法新增資料
⚠️ 必須執行db.session.commit() 才會將資料儲存至資料庫內
結論
- 使用sqlalchemy必須先設定資料庫路徑❗️
- 建立一個table(User)
- 使用flask shell進行測試
- 新增資料庫資料前,需建立資料庫❗️
- 資料最後必須執行儲存指令才會存至資料庫❗️
- sqlalchemy可條件篩選資料