前言
Flask-SQLAlchemy 是 Flask 框架的一个强大扩展,使得与数据库的交互变得简单和直观。ORM(对象关系映射)允许我们使用 Python 类和对象来表示数据库中的表和记录,从而简化了增删改查(CRUD)操作。本文将详细介绍如何使用 Flask-SQLAlchemy 进行这些操作。
初始化项目
在开始之前,确保您已经安装了 Flask 和 Flask-SQLAlchemy。可以使用以下命令安装它们:
pip install Flask Flask-SQLAlchemy
创建一个基本的 Flask 应用,并初始化 SQLAlchemy:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
定义数据库模型
定义一个简单的模型,例如用户模型 User
:
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)
def __repr__(self):
return f'<User {self.username}>'
创建数据库和表:
with app.app_context():
db.create_all()
创建记录(Create)
向数据库中添加新记录可以使用 SQLAlchemy 的 add
和 commit
方法:
@app.route('/create_user')
def create_user():
new_user = User(username='john_doe', email='john@example.com')
db.session.add(new_user)
db.session.commit()
return f'User {new_user.username} created!'
查询记录(Read)
查询数据库中的记录有多种方法,可以使用 filter_by
、filter
、all
、first
等方法:
@app.route('/get_user/<username>')
def get_user(username):
user = User.query.filter_by(username=username).first()
if user:
return f'User found: {user.username}, Email: {user.email}'
else:
return 'User not found'
更新记录(Update)
更新数据库中的记录需要先查询到该记录,然后修改其属性值并提交更改:
@app.route('/update_user/<username>')
def update_user(username):
user = User.query.filter_by(username=username).first()
if user:
user.email = 'new_email@example.com'
db.session.commit()
return f'User {user.username} updated!'
else:
return 'User not found'
删除记录(Delete)
删除数据库中的记录需要先查询到该记录,然后使用 delete
方法删除并提交更改:
@app.route('/delete_user/<username>')
def delete_user(username):
user = User.query.filter_by(username=username).first()
if user:
db.session.delete(user)
db.session.commit()
return f'User {user.username} deleted!'
else:
return 'User not found'
完整示例
以下是一个完整的示例代码,包括所有 CRUD 操作:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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)
def __repr__(self):
return f'<User {self.username}>'
with app.app_context():
db.create_all()
@app.route('/create_user')
def create_user():
new_user = User(username='john_doe', email='john@example.com')
db.session.add(new_user)
db.session.commit()
return f'User {new_user.username} created!'
@app.route('/get_user/<username>')
def get_user(username):
user = User.query.filter_by(username=username).first()
if user:
return f'User found: {user.username}, Email: {user.email}'
else:
return 'User not found'
@app.route('/update_user/<username>')
def update_user(username):
user = User.query.filter_by(username=username).first()
if user:
user.email = 'new_email@example.com'
db.session.commit()
return f'User {user.username} updated!'
else:
return 'User not found'
@app.route('/delete_user/<username>')
def delete_user(username):
user = User.query.filter_by(username=username).first()
if user:
db.session.delete(user)
db.session.commit()
return f'User {user.username} deleted!'
else:
return 'User not found'
if __name__ == '__main__':
app.run(debug=True)
总结
通过本文,您已经了解了如何使用 Flask-SQLAlchemy 进行数据库的增删改查操作。使用 Flask-SQLAlchemy,您可以轻松地管理数据库操作,提高开发效率。