【python】flask結合SQLAlchemy,在視圖函數中實現對數據庫的增刪改查

Python 是一個廣泛使用的程式設計語言,而 Flask 和 SQLAlchemy 是兩個非常流行的框架,用於創建 Web 應用程序和與資料庫交互。本篇文章將詳細介紹如何在 Python 的 Flask 中使用 SQLAlchemy 來實現對資料庫的 CRUD(Create, Read, Update, Delete)操作。以下是如何開始的基本步驟:

1. 安裝 Flask 和 SQLAlchemy

首先,您需要確保您的環境已經設置好,並且具有 `pip` 命令可用。然後可以使用 `pip` 來安裝 Flask 和 SQLAlchemy:

pip install flask sqlalchemy

2. 建立一個基本的 Flask 應用程序

我們從建立一個簡單的 Flask 應用程序開始,它會包含我們的視圖函數和用於與資料庫交互的模型類。通常,Flask 應用程序有一個入口點,即 `app.py` 或類似的文件。

3. 定義數據模型

使用 SQLAlchemy,您可以定義一種稱為「實體」的類,這些類代表資料庫中的表。例如,假設我們想要追蹤一些用戶的信息,我們可以這樣做:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session

Base = declarative_base()

class User(Base):
__tablename__ = 'users'  # 表的名稱
id = Column(Integer, primary_key=True)  # 主鍵
username = Column(String(50))  # 使用者名稱欄位
email = Column(String(100), unique=True)  # 獨特的電子郵件地址欄位

def __repr__(self):
return f"<User('{self.username}', '{self.email}')>"

4. 配置 SQLAlchemy

為了讓 SQLAlchemy 知道如何連接到您的資料庫,您需要在您的應用程序中進行配置。這通常涉及提供到您的資料庫服務器的連接參數,並創建一個 DB 會話製造器函數:

from flask import Flask
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from your_package import Base, User

basedir = os.path.abspath(os.path.dirname(__file__))

# 連線至資料庫
engine = create_engine(f'sqlite:///{os.path.join(basedir, "yourdatabase.db")}')
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 在每個 WSGI 循環中共享單一會話
db = scoped_session(SessionLocal)

@app.before_first_request
def create_tables():
if not engine.dialect.has_table(engine, Base.metadata.tables['users']):
Base.metadata.create_all(engine)

5. 在視圖函數中執行 CRUD 操作

現在您有了資料庫的基礎架構,可以在視圖函數中使用 `db.session` 和 SQLAlchemy ORM 來添加新的資料行、更新現有的資料行以及刪除資料行。這裡有一些範例方法:

  • 新增(Create):
@app.route('/signup', methods=['POST'])
def signup():
new_user = User(username=form.username.data, email=form.email.data)
db.session.add(new_user)
db.session.commit()
return redirect(url_for('index'))

  • 讀取(Read):
@app.route('/users/<int:user_id>')
def user(user_id):
user = db.session.get(User, user_id)
return render_template('user.html', user=user)

@app.route('/users')
def users():
users = User.query.all()
return render_template('users.html', users=users)

  • 更新(Update):
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
user = db.session.get(User, user_id)
user.update(form.username.data, form.email.data)
db.session.commit()
return redirect(url_for('user', user_id=user.id))

  • 刪除(Delete):
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
user = db.session.get(User, user_id)
db.session.delete(user)
db.session.commit()
return redirect(url_for('users'))

6. 處理錯誤和驗證

當您的工作涉及到敏感信息時,如使用者的帳戶資訊,請務必小心地處理錯誤和驗證所有輸入以防止注入攻擊或其他安全漏洞。

7. 測試和部署

一旦您的應用程序開發完成,應該進行嚴格的測試以確保其功能性和安全性。最後,根據您的需求選擇合適的方式來部署您的應用程序,可能是雲端服務、虛擬機器或是本地運行。

總結來說,通過結合 Flask 和 SQLAlchemy,您可以輕鬆地在 Python 中創建強大的Web應用程序,同時擁有對資料庫管理的優秀支持。記得在任何生產環境中都要考慮性能調優和安全措施的最佳實踐。

为您推荐