ORM(Object-Relational Mapping)是一種程式設計技術,它把關係型資料庫中的表格資料映射到程式語言中的對象,使得程式開發者可以用物件導向的方式對資料庫進行操作。 Flask-SQLAlchemy是一款強大的ORM框架,能大幅簡化Python程式對於關聯式資料庫的操作。
本文將會透過一個實例,詳細介紹Flask-SQLAlchemy框架的使用方法。
在學習Flask-SQLAlchemy之前,我們需要先安裝Flask及SQLAlchemy模組。在Python環境下使用pip指令即可安裝。
pip install Flask
pip install SQLAlchemy
配置MySQL資料庫作為專案的持久化存儲,在建立Flask-SQLAlchemy物件時,傳遞如下參數即可:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost:3306/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
定義資料模型
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) 新增學生資訊
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'])
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'])
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')
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將學生物件清單轉換為字典清單返回。
以上是Python中的ORM框架Flask-SQLAlchemy實戰的詳細內容。更多資訊請關注PHP中文網其他相關文章!