【python】flask中ORM工具SQLAIchemy,各種數據查詢操作詳細解析

在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將大大提高開發效率和應用程式的可維護性。

为您推荐