Flask-SQLAlchemy是一个基于SQLAlchemy的ORM(Object Relational Mapping)框架,适用于Flask应用程序。ORM框架屏蔽了底层数据库的操作,提供了一个Python编程接口,使得开发者可以直接使用Python代码操作数据库,而不用写SQL语句。
本文将详细介绍Flask-SQLAlchemy框架的使用,包括如何连接数据库、创建表、插入、更新、删除数据和查询数据等操作。
连接数据库
在使用Flask-SQLAlchemy之前,首先需要在Flask中配置数据库连接。具体方式如下:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = '数据库连接信息' # 数据库连接信息 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 是否追踪对象的修改 db = SQLAlchemy(app)
其中,SQLALCHEMY_DATABASE_URI是数据库连接信息。如果使用的是SQLite,则格式为sqlite:///文件路径
;如果是MySQL,则格式为mysql+pymysql://用户名:密码@主机名/数据库名
(pymysql是用于连接MySQL的Python库);如果是PostgreSQL,则格式为postgresql://用户名:密码@主机名/数据库名
。
SQLALCHEMY_TRACK_MODIFICATIONS表示是否追踪对象的修改。如果设置为True,则会在每次请求结束时检查对象的状态并写入数据库。该功能可以用于调试和性能优化,但会带来一些开销。因此,在生产环境中建议关闭它。
创建表
Flask-SQLAlchemy支持通过Python类来定义表。每个类对应一个数据库表,类中的属性对应数据库表的字段。
下面是一个示例:
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 '<User %r>' % self.username
其中,db.Model是所有模型类的基类,表示这个类是一个数据库模型。id、username、email是该表的字段,其中id是主键,username和email都是唯一的,且不能为空。__repr__()方法用于打印对象,方便调试。
要创建这个表,只需要执行以下命令:
from app import db db.create_all()
这将在数据库中创建一个名为User的表。如果已经存在,则不会重复创建。如果有多个表需要创建,则可以在同一处使用db.create_all()命令创建。
插入数据
向数据库中插入数据,只需要创建一个类实例,并调用add()和commit()方法。
from app import db from app.models import User user = User(username='test', email='test@test.com') db.session.add(user) db.session.commit()
上述代码中,首先创建了一个User对象,然后将其添加到数据库会话中。最后,调用commit()方法提交事务,将数据存入数据库。
更新数据
更新数据和插入数据类似,只需要先查询出要更新的数据、修改其属性并提交即可。
from app import db from app.models import User user = User.query.filter_by(username='test').first() user.email = 'new_test@test.com' db.session.commit()
上述代码中,首先根据用户名查询到了要更新的User对象,然后修改了email属性并提交了修改。
删除数据
和更新数据类似,只需要先查询出要删除的数据,然后调用delete()方法进行删除。
from app import db from app.models import User user = User.query.filter_by(username='test').first() db.session.delete(user) db.session.commit()
上述代码中,首先根据用户名查询到了要删除的User对象,然后调用delete()方法进行删除。
查询数据
Flask-SQLAlchemy支持多种查询方式,包括按条件查询、排序、分页等。
按条件查询
按条件查询是最常见的方式。可以使用query.filter()方法指定查询条件。示例代码如下:
from app import db from app.models import User # 查询所有 users = User.query.all() # 条件查询 users = User.query.filter_by(username='test').all()
上述代码中,第一行代码查询了User表中的所有数据;第二行代码按照username='test'条件查询出数据。
排序查询
可以使用order_by()方法对查询结果进行排序。示例代码如下:
from app import db from app.models import User # 按名称排序(升序) users = User.query.order_by(User.username).all() # 按名称排序(降序) users = User.query.order_by(User.username.desc()).all()
上述代码中,第一行代码按照username升序排列查询结果;第二行代码按照username降序排列查询结果。
分页查询
可以使用paginate()方法实现分页查询。示例代码如下:
from app import db from app.models import User # 每页2条,查询第1页 users = User.query.paginate(1, 2, False) # 查询第一页 users = User.query.order_by(User.username).paginate(1, 10, False)
上述代码中,第一行代码查询了第1页的2条数据;第二行代码查询了按照username排序的第1页的10条数据。
总结
Flask-SQLAlchemy是一个强大的ORM框架,提供了强大的查询和操作数据库的接口,使得开发者可以快速方便地操作数据库。本文介绍了Flask-SQLAlchemy的使用,包括创建表、插入、更新、删除和查询数据。希望本文能够帮助读者更好地理解和应用Flask-SQLAlchemy。