首頁  >  文章  >  後端開發  >  Python中的ORM框架Flask-SQLAlchemy實戰

Python中的ORM框架Flask-SQLAlchemy實戰

WBOY
WBOY原創
2023-06-10 22:57:051839瀏覽

ORM(Object-Relational Mapping)是一種程式設計技術,它把關係型資料庫中的表格資料映射到程式語言中的對象,使得程式開發者可以用物件導向的方式對資料庫進行操作。 Flask-SQLAlchemy是一款強大的ORM框架,能大幅簡化Python程式對於關聯式資料庫的操作。

本文將會透過一個實例,詳細介紹Flask-SQLAlchemy框架的使用方法。

  1. 環境設定

在學習Flask-SQLAlchemy之前,我們需要先安裝Flask及SQLAlchemy模組。在Python環境下使用pip指令即可安裝。

pip install Flask
pip install SQLAlchemy

  1. #資料庫配置

配置MySQL資料庫作為專案的持久化存儲,在建立Flask-SQLAlchemy物件時,傳遞如下參數即可:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

第一個參數:flask應用實例

第二個參數:資料庫連線URI

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost:3306/test'

#關閉SQLALCHEMY_TRACK_MODIFICATIONS選項,提高程式運行效率

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

#初始化db物件

db = SQLAlchemy(app)

  1. ##呼叫app.config來設定Flask應用程式實例的設定參數,其中SQLALCHEMY_DATABASE_URI參數用於指定連接的資料庫類型、使用者名稱、密碼、IP位址、連接埠號碼、資料庫名稱等資訊。

ORM實作

定義資料模型

首先,我們需要定義資料模型,也就是ORM的映射對象,這裡我們以學生資訊為例,定義一個Student類別:

from datetime import datetime

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

SQLAlchemy ORM設計模型

## class Student(db.Model):

# 定义表名
__tablename__ = 'student'
# 定义表结构,其中id为主键,自增长
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(20), nullable=False)
gender = db.Column(db.String(2), nullable=False)
birthday = db.Column(db.Date, default=datetime.now())
address = db.Column(db.String(200), nullable=False)

# 类对象序列化成字典
def to_dict(self):
    return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}

在Student類別中,我們定義了__tablename__、id、name、gender、birthday、address這些表格結構。其中__tablename__用於指定表名,id用於指定主鍵並自增長,name、gender、birthday、address這些欄位用於儲存學生姓名、性別、生日和住址的資訊。

增刪改查操作

接下來,我們實作增刪改查操作:


(1) 新增學生資訊

##@app.route(' /add', methods=['POST'])##def add_student():

student = Student()
student.name = request.form.get('name')
student.gender = request.form.get('gender')
student.birthday = datetime.strptime(request.form.get('birthday'), '%Y-%m-%d').date()
student.address = request.form.get('address')
db.session.add(student)
db.session.commit()
return jsonify({'code': 200, 'msg': 'add student success.'})

首先透過request.form.get()取得提交的表單數據,然後建立Student物件並設定屬性值,最後透過db.session.add()新增物件到資料庫中,並透過db.session.commit()提交事務。

(2) 刪除學生資訊


@app.route('/delete/3e2f7d559aac0f0aeba61111f4764f61', methods=['DELETE'])

def delete_student(id ):

student = Student.query.get(id)
if student:
    db.session.delete(student)
    db.session.commit()
    return jsonify({'code': 200, 'msg': 'delete student success.'})
else:
    return jsonify({'code': 404, 'msg': 'student not found.'})

傳遞學生id參數,透過query.get()方法取得到該學生的實例,並使用db.session.delete()方法將其從資料庫中刪除,並透過db.session .commit()提交事務。

(3) 修改學生資訊


@app.route('/update/3e2f7d559aac0f0aeba61111f4764f61', methods=['PUT'])

def update_student(id ):

student = Student.query.get(id)
if student:
    student.name = request.form.get('name')
    student.gender = request.form.get('gender')
    student.birthday = datetime.strptime(request.form.get('birthday'), '%Y-%m-%d').date()
    student.address = request.form.get('address')
    db.session.commit()
    return jsonify({'code': 200, 'msg': 'update student success.'})
else:
    return jsonify({'code': 404, 'msg': 'student not found.'})

同樣根據學生id參數取得學生實例,在修改學生資料後,使用db.session.commit()提交交易。

(4) 查詢學生資訊


@app.route('/search')

def search_student():

students = Student.query.all()
if students:
    return jsonify({'code': 200, 'msg': 'search student success.', 'data': [student.to_dict() for student in students]})
else:
    return jsonify({'code': 404, 'msg': 'student not found.'})

使用query.all()方法查詢到Student表中所有的學生訊息,並透過list comprehension將學生物件清單轉換為字典清單返回。
  1. 總結

Flask-SQLAlchemy是一個非常強大的ORM框架,能夠讓Python編寫資料庫操作的程式碼更加簡單易讀。本文透過一個實例,深入介紹了Flask-SQLAlchemy的使用方法。

在實際開發中,我們可以依照類似本文的方式進行資料模型的定義與增刪改查操作的實作。這些操作的複雜度都很低,運用Flask-SQLAlchemy框架能讓我們在提高開發效率的同時,降低程式維護成本。 ###

以上是Python中的ORM框架Flask-SQLAlchemy實戰的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn