【PythonWeb开发】Flask连接数据库以及执行数据迁移

发布于:2024-07-01 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、连接数据库

        在Flask中可以使用 Flask-SQLAlchemy 扩展来连接数据库。如果你选择不同的数据库或 ORM,初始化和配置的方式可能会有所不同。下面给出三种常见数据库的连接示例:

(1)连接MySQL数据库

        使用Flask-SQLAlchemy即可实现对MySQL数据库的连接,但首先得安装相应的库

pip install flask-sqlalchemy pymysql

        Flask-SQLAlchemy是对原生的 SQLAlchemy的拓展,提供了一些方便的快捷方式和集成点,使它在 Flask 应用中更为常用。pymysql是MySQL的驱动,让Python操作MySQL数据库成为可能。

# exts.py中连接数据库要安装一些插件
"""
用于ORM:pip install flask-sqlalchemy

用于数据迁移:pip install flask-migrate

用于MySQL驱动:pip install pymysql
"""

# 插件的使用方法可以总结成三步:

# 1. 导入第三方插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# 2. 实例化插件对象
db = SQLAlchemy()
migrate = Migrate()

# 3. 绑定app
def init_exts(app):

    db.init_app(app=app)  # 初始化数据库插件
    migrate.init_app(app=app, db=db)  # 初始化迁移插件,并关联数据库插件

在对应的子应用App文件夹里创建__init__.py文件。并配置数据库连接:

# 在__init__.py中导入Flask库
from flask import Flask
# 从当前目录下的views模块中导入blue对象
from .views import blue
# 从当前目录下面的exts模块中导入初始化插件函数
from .exts import init_exts


# 定义一个创建应用的函数
def create_app():
    # 创建一个Flask应用实例
    app = Flask(__name__)
    
    # 注册蓝图,将blue对象注册到app上
    app.register_blueprint(blueprint=blue)

    # 设置数据库连接URI
    DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(
        USERNAME,
        PASSWORD,
        HOSTNAME,
        PORT,
        DATABASE
    )  # 这是连接MySQL数据库的设置


    # 将数据库连接URI配置到app的配置中
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
    # 关闭SQLAlchemy的事件系统,提高性能
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    # 初始化插件
    init_exts(app)

    # 返回创建好的Flask应用实例
    return app

(2)连接SQLite数据库

        使用Flask-SQLAlchemy即可实现对SQLite数据库的连接,配置连接 SQLite 数据库非常简单:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 设置数据库连接URI
DB_URI = 'sqlite:///sqlite3.db'  # 要改这个地方'sqlite:///这是你数据库的名字.db'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
db = SQLAlchemy(app)

(3)连接MongoDB数据库

        安装 Flask-PyMongo 或 pymongo可以实现对MongoDB数据库的连接

pip install flask flask-pymongo pymongo

        首先导入了必要的Flask和pymongo库。然后,我们创建了一个Flask实例,并且配置了一个MONGO_URI配置项来定义MongoDB的连接字符串和数据库名。接下来,我们创建了一个MongoClient实例,用于与MongoDB交互。

from flask import Flask
from flask_pymongo import PyMongo

app = Flask(__name__)
DB_URI = 'mongodb://username:password@localhost:27017/myDatabase'
app.config['MONGO_URI'] = DB_URI
mongo = PyMongo(app)

        在实际应用中,替换 'username:password@localhost' 以及 'dbname''myDatabase' 等占位符为你的实际数据库凭据和名称。

        使用 mongo = PyMongo(app) 创建的 mongo 对象,可以非常方便地与 MongoDB 数据库进行交互。这个对象提供了很多方法来执行 CRUD 操作(创建 Create、读取 Read、更新 Update、删除 Delete)。下面是一些基本的使用示例:

① 访问集合

users = mongo.db.users

② 插入文档

# 创建一个新用户字典,包含用户名、电子邮件和加入时间
new_user = {
    "username": "Alice",
    "email": "alice@example.com",
    "joined_on": datetime.utcnow()
}

# 将新用户插入到数据库的users集合中
insert_result = users.insert_one(new_user)

# 打印插入操作的结果,显示新用户的ID
print(f"Inserted ID: {insert_result.inserted_id}")

③ 查询文档

# 查询所有用户
all_users = users.find()
for user in all_users:
    print(user)

# 根据条件查询
user_by_email = users.find_one({"email": "alice@example.com"})
print(user_by_email)

④ 更新文档

# 更新一个文档,将email为"alice@example.com"的用户的username字段设置为"Alicia"
update_result = users.update_one(
    {"email": "alice@example.com"},  # 查询条件:查找email为"alice@example.com"的用户
    {"$set": {"username": "Alicia"}}  # 更新操作:设置username字段为"Alicia"
)

# 打印修改的文档数量
print(f"Modified count: {update_result.modified_count}")  # 输出修改的文档数量

⑤ 删除文档

# 删除用户名为"Alicia"的用户记录,并返回删除结果
delete_result = users.delete_one({"username": "Alicia"})

# 打印删除的记录数
print(f"Deleted count: {delete_result.deleted_count}")

二、数据迁移

        在 Flask 中执行数据库迁移,通常会使用 Flask-Migrate 扩展,它是基于 Alembic 的一个简单包装器,用于处理数据库迁移。以下是如何使用 Flask-Migrate 执行数据迁移的基本步骤:

 (1)安装Flask-Migrate

pip install Flask-Migrate

(2)初始化Flask-Migrate

        以SQLite为例,在 Flask 应用中初始化Flask-Migrate

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
URI = 'sqlite:///example.db'  # 请根据实际情况替换为你的数据库URI
app.config['SQLALCHEMY_DATABASE_URI'] = URI
db = SQLAlchemy(app)

# 初始化 Flask-Migrate
migrate = Migrate(app, db)

(3)四条迁移命令

  • flask db init

        初始化迁移环境,这是第一次设置时需要执行的操作,它会在你的项目中创建一个迁移脚本的目录。

flask db init
  • flask db migrate

        生成迁移脚本,每当你的模型有变动时,都需要执行此命令来生成迁移脚本。

flask db migrate -m "Migration message describing the changes"

-m 参数后面跟着的是对此次迁移的简短描述,这将被用作迁移脚本的名称。 

  • flask db upgrade

应用迁移,使用此命令来应用实际的数据库变更。

flask db upgrade
  • flask db downgrade

如果你需要撤销最近的迁移,可以使用以下命令

flask db downgrade

        默认情况下,这会撤销最后一次迁移。如果你想回滚到更早的版本,可能需要指定回退到的具体版本号。