8.1 Flask-SQLAlchemy 基础
Flask-SQLAlchemy 基础教程:安装、配置与模型定义全攻略
本教程详细讲解Flask-SQLAlchemy扩展的安装、应用初始化配置、数据库连接(SQLite、MySQL、PostgreSQL)设置,以及模型类定义方法,帮助初学者快速上手Flask与数据库集成开发。
Flask-SQLAlchemy 基础教程:扩展安装、配置与模型定义
Flask-SQLAlchemy 是一个Flask扩展,它简化了在Flask应用中使用SQLAlchemy ORM(对象关系映射)的过程。对于新手来说,这可以让你更容易地操作数据库,而无需编写复杂的SQL语句。本教程将带你从零开始,学习如何安装、配置Flask-SQLAlchemy,以及定义模型类。
1. 安装Flask-SQLAlchemy
在开始之前,请确保你已经安装了Flask。如果没有,可以使用pip安装Flask。然后,通过pip安装Flask-SQLAlchemy扩展。
步骤:
- 打开终端或命令行界面。
- 运行以下命令安装Flask-SQLAlchemy:
pip install Flask-SQLAlchemy - 对于MySQL或PostgreSQL,你可能需要安装额外的数据库适配器。例如:
- MySQL:
pip install pymysql - PostgreSQL:
pip install psycopg2或psycopg2-binary(推荐后者,因为它更容易安装)
- MySQL:
2. 应用初始化与配置
创建一个基本的Flask应用并配置Flask-SQLAlchemy。
步骤:
- 创建一个新的Python文件,例如
app.py。 - 导入必要的模块:
from flask import Flask from flask_sqlalchemy import SQLAlchemy - 初始化Flask应用:
app = Flask(__name__) - 配置数据库URI(统一资源标识符):Flask-SQLAlchemy使用
SQLALCHEMY_DATABASE_URI配置来指定数据库连接。URI的格式取决于数据库类型。- SQLite: 用于本地开发或轻量级应用。配置简单,直接指定数据库文件路径。例如:
'sqlite:///mydatabase.db'(三个斜杠表示相对路径,会创建在当前目录下)。 - MySQL: 需要指定用户名、密码、主机和数据库名。例如:
'mysql+pymysql://username:password@hostname/database_name'(确保替换为你的实际凭据)。 - PostgreSQL: 类似MySQL,但使用
postgresql或postgresql+psycopg2前缀。例如:'postgresql+psycopg2://username:password@hostname/database_name'。
- SQLite: 用于本地开发或轻量级应用。配置简单,直接指定数据库文件路径。例如:
- 设置配置项:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' # 这里以SQLite为例,稍后会详细展示其他数据库 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 推荐设置为False以关闭警告信息 - 初始化SQLAlchemy实例:
db = SQLAlchemy(app)
示例代码:
# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
if __name__ == '__main__':
app.run(debug=True)
3. 数据库连接配置(SQLite、MySQL、PostgreSQL)
根据你的需求选择数据库类型。在SQLALCHEMY_DATABASE_URI中调整配置。
SQLite 配置
- SQLite 是一个文件型数据库,适用于开发和测试。
- URI格式:
'sqlite:///database_name.db'(在项目根目录下创建文件)。 - 如果需要绝对路径:
'sqlite:////path/to/database.db'(四个斜杠)。 - 无需额外安装数据库服务器,但文件会被存储在本地。
MySQL 配置
- MySQL 是一个流行的关系型数据库服务器。
- 确保MySQL服务器已安装并运行,并创建好数据库。
- URI格式:
'mysql+pymysql://username:password@hostname:port/database_name'(端口默认为3306,可省略)。 - 示例:
'mysql+pymysql://root:password@localhost/mydatabase'。 - 需要安装pymysql:
pip install pymysql。
PostgreSQL 配置
- PostgreSQL 是另一个强大的开源关系型数据库。
- 确保PostgreSQL服务器已安装并运行,并创建好数据库。
- URI格式:
'postgresql+psycopg2://username:password@hostname:port/database_name'(端口默认为5432)。 - 示例:
'postgresql+psycopg2://postgres:password@localhost/mydb'。 - 需要安装psycopg2:
pip install psycopg2-binary(推荐,因为它容易安装)。
在应用中切换配置:你可以根据环境(如开发、生产)更改URI。例如:
import os
if os.environ.get('ENV') == 'production':
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://user:pass@host/db'
else:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///dev.db'
4. 模型类定义(继承 db.Model)
模型类是用来映射数据库表的Python类。通过继承db.Model,你可以轻松定义表结构。
基本步骤:
- 在Python文件中定义类,继承自
db.Model。 - 使用
db.Column定义列(字段)。 - 指定列的类型(如
db.String、db.Integer)和其他属性(如主键、唯一性)。
示例模型定义:
假设我们要定义一个用户(User)表,包含id、用户名和邮箱字段。
# 在app.py或其他模型文件中定义
class User(db.Model):
id = db.Column(db.Integer, primary_key=True) # 主键,自动递增
username = db.Column(db.String(80), unique=True, nullable=False) # 字符串类型,最大80字符,唯一,非空
email = db.Column(db.String(120), unique=True, nullable=False) # 最大120字符,唯一,非空
def __repr__(self):
return f'<User {self.username}>' # 用于调试时显示友好信息
解释:
id: 整数列,作为主键。primary_key=True表示这是主键列,通常用于唯一标识每行数据。username: 字符串列,unique=True确保用户名唯一,nullable=False表示不能为空。email: 类似,确保邮箱唯一且非空。__repr__方法可选,用于在Python解释器中显示对象信息。
创建数据库表:
定义模型后,你需要创建实际的数据库表。这可以通过Flask-SQLAlchemy的db.create_all()方法实现。通常放在应用启动时执行。
修改 app.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.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()
if __name__ == '__main__':
app.run(debug=True)
注意: 使用with app.app_context()确保在Flask应用上下文中执行数据库操作,以避免错误。
总结
通过本教程,你已经学会了如何安装Flask-SQLAlchemy、初始化Flask应用、配置不同数据库(SQLite、MySQL、PostgreSQL)的连接,以及定义继承自db.Model的模型类。这为你构建Flask应用中的数据库操作奠定了基础。接下来,你可以学习如何使用这些模型进行查询、插入、更新和删除数据。
快速回顾:
- 安装:
pip install Flask-SQLAlchemy,并根据需要安装数据库适配器。 - 配置:在Flask应用中设置
SQLALCHEMY_DATABASE_URI和其他配置项。 - 模型:定义Python类继承
db.Model,使用db.Column定义表结构。 - 表创建:调用
db.create_all()在应用中创建表。
祝你学习愉快,如果有更多问题,可以参考Flask和SQLAlchemy的官方文档。