在Flask框架中,ORM(Object-Relational Mapping)工具SQLAlchemy是一個非常流行的選項,它提供了高效且靈活的資料庫訪問方式。以下將詳細介紹如何在Flask應用程式中使用SQLAlchemy進行各種數據查詢操作。
1. 基礎設置與模型定義
首先,您需要在您的Flask應用程式中安裝SQLAlchemy並配置其連接參數。然後,您可以定義基於表的模型類,這些類映射到資料庫中的對應表格。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db' # 更改為實際的資料庫路徑
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(128))
2. 創建資料庫與表格
要創建資料庫及相應的表格,您可以使用`create_all()`方法來執行自動遷移。
with app.app_context():
db.create_all()
3. 插入資料
您可以通過創建模型實例並調用`save()`方法來將新的記錄添加到資料庫中。
new_user = User(username='example', email='[email protected]', password_hash='<PASSWORD>')
new_user.save()
4. 更新資料
您可以使用`update()`方法來更新已存在的記錄。
user = User.query.filter_by(email=['[email protected]']).first()
user.email = '[email protected]'
db.session.add(user)
db.session.commit()
5. 刪除資料
您可以使用`delete_from()`或`delete()`方法來從資料庫中刪除記錄。
user = User.query.filter_by(email=['[email protected]']).first()
if user:
db.session.delete(user)
db.session.commit()
6. 查詢資料
6.1 基本的查詢
您可以使用`Query`物件上的各種方法來篩選、排序和分頁結果集。
users = User.query.order_by(User.username).all()
6.2 條件查詢
你可以使用`filter_*`系列方法來根據特定的條件查找紀錄。
user = User.query.filter_by(username='example').first()
或者,如果您想要更複雜的條件表達式,可以運用SQLAlchemy的核心功能`operators`。
user = User.query.filter(User.username == 'example').first()
6.3 子查詢
SQLAlchemy支援子查詢作為條件的一部分,這使得能夠實現更強大的查詢語句。
subquery = db.session.query(User.email).distinct().subquery()
user_emails = [u.email for u in users if u.email in subquery]
6.4 聯結與內部查詢
當您需要從多個模型中獲取資料時,SQLAlchemy允許您透過關係聯結來執行內部查詢。
post = Post.query.join('comments').options(load_only('title')).one()
7. 交易處理
SQLAlchemy的事務管理使您可以在一系列的操作上建立一致性保證。
with app.app_context():
try:
# 在事務塊內執行多個操作
db.session.add(new_user)
db.session.commit()
except Exception as e:
print(e)
db.session.rollback()
總結
SQLAlchemy提供了一個強大而靈活的API,讓開發人員能夠輕鬆地與資料庫互動,而不必直接操作底層的SQL語句。它的ORM模式簡化了許多常見的資料庫操作,並且有大量的文檔和資源可用,以幫助使用者充分利用這個工具。在Flask應用程式中集成SQLAlchemy將大大提高開發效率和應用程式的可維護性。