Flask 中文教程

第四部分:实战项目篇
第12章 入门级实战:个人博客系统
第13章 进阶级实战:RESTful API 服务
第五部分:部署运维与优化篇
第14章 Flask 应用部署
第15章 性能优化与安全加固
第六部分:问题解决与进阶篇
第16章 常见问题与解决方案
第17章 Flask 进阶与扩展

8.1 Flask-SQLAlchemy 基础

Flask-SQLAlchemy 基础教程:安装、配置与模型定义全攻略

Flask 中文教程

本教程详细讲解Flask-SQLAlchemy扩展的安装、应用初始化配置、数据库连接(SQLite、MySQL、PostgreSQL)设置,以及模型类定义方法,帮助初学者快速上手Flask与数据库集成开发。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Flask-SQLAlchemy 基础教程:扩展安装、配置与模型定义

Flask-SQLAlchemy 是一个Flask扩展,它简化了在Flask应用中使用SQLAlchemy ORM(对象关系映射)的过程。对于新手来说,这可以让你更容易地操作数据库,而无需编写复杂的SQL语句。本教程将带你从零开始,学习如何安装、配置Flask-SQLAlchemy,以及定义模型类。

1. 安装Flask-SQLAlchemy

在开始之前,请确保你已经安装了Flask。如果没有,可以使用pip安装Flask。然后,通过pip安装Flask-SQLAlchemy扩展。

步骤:

  1. 打开终端或命令行界面。
  2. 运行以下命令安装Flask-SQLAlchemy:
    pip install Flask-SQLAlchemy
    
  3. 对于MySQL或PostgreSQL,你可能需要安装额外的数据库适配器。例如:
    • MySQL:pip install pymysql
    • PostgreSQL:pip install psycopg2psycopg2-binary(推荐后者,因为它更容易安装)

2. 应用初始化与配置

创建一个基本的Flask应用并配置Flask-SQLAlchemy。

步骤:

  1. 创建一个新的Python文件,例如 app.py
  2. 导入必要的模块:
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
  3. 初始化Flask应用:
    app = Flask(__name__)
    
  4. 配置数据库URI(统一资源标识符):Flask-SQLAlchemy使用SQLALCHEMY_DATABASE_URI配置来指定数据库连接。URI的格式取决于数据库类型。
    • SQLite: 用于本地开发或轻量级应用。配置简单,直接指定数据库文件路径。例如:'sqlite:///mydatabase.db'(三个斜杠表示相对路径,会创建在当前目录下)。
    • MySQL: 需要指定用户名、密码、主机和数据库名。例如:'mysql+pymysql://username:password@hostname/database_name'(确保替换为你的实际凭据)。
    • PostgreSQL: 类似MySQL,但使用postgresqlpostgresql+psycopg2前缀。例如:'postgresql+psycopg2://username:password@hostname/database_name'
  5. 设置配置项:
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'  # 这里以SQLite为例,稍后会详细展示其他数据库
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 推荐设置为False以关闭警告信息
    
  6. 初始化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,你可以轻松定义表结构。

基本步骤:

  1. 在Python文件中定义类,继承自db.Model
  2. 使用db.Column定义列(字段)。
  3. 指定列的类型(如db.Stringdb.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的官方文档。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包