Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
在Python中我们可以使用SQLAlchemy框架进行数据库操作,那么对应的在Flask框架中我们可以使用SQLAlchemy,下面我们就来看一下Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程 ### 使用Flask-SQLAlchemy管理数据库 #### 一、Flask-SQLAlchemy简介 Flask-SQLAlchemy是一个针对Flask框架的扩展库,它简化了SQLAlchemy在Flask中的使用方式,使得开发者能够更加便捷地操作数据库。SQLAlchemy本身是一个全功能的企业级持久层工具包,提供了对象关系映射(ORM)功能,同时还支持执行原始SQL语句的能力。 #### 二、Flask-SQLAlchemy安装与配置 1. **安装**: - 可以通过`pip install flask-sqlalchemy`命令来安装Flask-SQLAlchemy。 2. **配置**: - 在Flask应用中,需要通过配置对象`app.config`来指定数据库连接的信息。关键配置项包括: - `SQLALCHEMY_DATABASE_URI`:用来指定数据库的URI,该URI指明了数据库的位置、类型等信息。 - `SQLALCHEMY_COMMIT_ON_TEARDOWN`:这是一个可选配置项,如果设置为`True`,则每次请求结束后会自动提交事务。 ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' # SQLite示例 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True db = SQLAlchemy(app) ``` #### 三、定义模型 在Flask-SQLAlchemy中,模型是由Python类表示的。这些类定义了与数据库表相对应的数据结构。 1. **基本模型定义**: - 每个模型都是`db.Model`的子类。 - 通过`db.Column`定义属性,每个属性代表数据库表的一个字段。 - `__tablename__`:定义表名,默认为类名的小写形式,但最好明确指定以符合命名规范。 ```python class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) def __repr__(self): return '<Role %r>' % self.name class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) def __repr__(self): return '<User %r>' % self.username ``` 2. **常见数据类型**: - `db.Integer`:整型。 - `db.String`:字符串类型,需要指定长度。 - `db.Float`:浮点型。 - `db.Boolean`:布尔类型。 - `db.DateTime`:日期时间类型。 3. **常用配置选项**: - `primary_key`:是否为主键。 - `unique`:是否唯一。 - `index`:是否索引。 - `nullable`:是否允许为空。 #### 四、创建数据库和表 在定义完模型之后,可以通过Flask-SQLAlchemy提供的方法来创建数据库和表。 1. **创建所有表**: - 使用`db.create_all()`方法可以创建所有定义的模型所对应的表。 ```python with app.app_context(): db.create_all() ``` 2. **删除所有表**: - 使用`db.drop_all()`方法可以删除所有定义的模型所对应的表。 ```python with app.app_context(): db.drop_all() ``` #### 五、数据库操作 1. **增删改查**: - 添加记录:`new_user = User(username='test')`,然后`db.session.add(new_user)`。 - 提交事务:`db.session.commit()`。 - 查询记录:`User.query.filter_by(username='test').first()`。 - 删除记录:`db.session.delete(user_instance)`。 - 更新记录:直接修改属性并提交事务。 2. **查询技巧**: - `filter_by`:根据条件筛选。 - `order_by`:排序。 - `all`/`first`/`get`:获取结果集。 #### 六、关系定义 在关系型数据库中,表与表之间通过外键等方式关联起来。Flask-SQLAlchemy提供了灵活的方式来定义这些关系。 1. **一对一关系**: - 使用`db.relationship`和`uselist=False`来定义一对一关系。 2. **一对多关系**: - 使用`db.relationship`定义一对多关系,通常通过外键实现。 3. **多对多关系**: - 需要定义一个关联表,然后使用`db.relationship`和`secondary`参数来定义多对多关系。 #### 七、进阶主题 1. **事务处理**: - 通过`db.session`进行事务的开启、提交或回滚。 2. **模型继承**: - 支持单表继承或多表继承。 3. **信号处理**: - 可以定义信号处理器来监听数据库事件,如`before_first_request`等。 通过以上内容,我们可以看到Flask-SQLAlchemy不仅简化了数据库操作,还提供了丰富的功能和灵活性。这使得开发者可以更加专注于业务逻辑的编写,而不用过多地关心底层数据库的操作细节。




























- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 新时代高职生网络生活状况研究.docx
- 基于改进粒子群优化算法的 BP 神经网络房价预测研究
- 人工智能写作会不会抢了电竞媒体的饭碗?.docx
- 单片机与PC机的温控制系统硬件设计.doc
- 基于51单片机ds1302和ds18b20芯片方案设计书的电子日历.doc
- ASPnet管理开题.doc
- 电子商务专业个人简历-范例.doc
- 2015最新Excel甘特图模板项目管理必备.xls
- 单片机测控系统中的抗干扰技术.doc
- (源码)基于C++的Alexa Voice Service原型.zip
- 基于单片机的水箱温自动控制系统设计张强.doc
- Go编程语言全面指南
- 大数据-资本市场下一波的宠儿.docx
- 谈供电局配网自动化的研究与实现.docx
- 基于词典与机器学习的中文微博情感分析.docx
- 基因工程制药下游技术生物学自然科学专业资料.ppt


