问1:为什么要使用SQLAlchemy

答:

因为要使用ORM(对象关系映射),开发者能够以 Python 对象的形式与数据库交互,而无需直接编写 SQL 语句。

问2:为什么要用ORM,具体是怎么操作的?

答:

ORM将数据库中的数据表示为Python类(模型),每个类对应一个数据库表。类的属性代表表的字段,类的实例代表表中的记录

问3:为什么不用SQL语句就能实现对数据的增删查改?

答:

ORM(对象关系映射)技术 将SQL语句进行了封装。这种封装使得开发者在进行数据库操作时不需要直接编写SQL语句,而是通过调用对象的方法和属性来进行数据的增、删、查、改

问4:使用Flask-Alchemy麻烦吗?要分几步?

答:

  1. 安装 Flask-SQLAlchemy
  2. 配置 Flask 应用
  3. 定义模型
  4. 创建数据库和表
  5. 执行 CRUD 操作
  6. 运行 Flask 应用

问5:具体是如何操作的?

答:

1.安装Flask和Flask-SQLAlchemy
pip install Flask Flask-SQLAlchemy
2.配置Flask应用
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'  # 设置数据库URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # 关闭追踪修改通知
db = SQLAlchemy(app)

对app.config的解释:

SQLALCHEMY_DATABASE_URI: 指定数据库的连接字符串。格式为 dialect+driver://username:password@host:port/database

若为mysql数据库,则为:mysql+pymysql://username:password@hostname:port/database

SQLALCHEMY_TRACK_MODIFICATIONS: 控制是否追踪对象的修改,以便发送信号。默认为 None,但建议显式设置为 False 来禁用此功能,从而避免不必要的内存消耗。

3.定义模型类
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}>'

定义模型类需要继承db.Model

一般使用id作为该类的主键 

__repr__  这个特殊的方法一般常用于返回一个字符串

当运行这段代码时

user = User(username='john_doe', email='john@example.com')
print(user)

将会输出

<User john_doe>
4.创建数据库和表 
with app.app_context():#创建应用上下文
    db.create_all()  # 创建数据库表

Flask-SQLAlchemy 提供了一个方便的方法来自动创建数据库表,无需手动创建表。

with app.app_context() 创建应用上下文

何为应用上下文?

Flask 是一个微框架,采用了上下文管理的概念来处理请求和应用的状态。上下文有助于在不同地方(例如视图函数、命令行脚本等)访问与当前请求和应用相关的信息。

  • 请求上下文:包含与请求相关的信息,如请求对象、session 等。
  • 应用上下文:包含与应用相关的信息,比如应用配置、数据库连接等。
为什么需要应用上下文?

在进行一些操作时,你需要在 Flask 的应用上下文中运行代码,以便能够访问到 current_appg 等全局对象。例如,在使用 Flask-SQLAlchemy 时,操作数据库需要在应用上下文内进行,因为数据库实例依赖于应用的配置。

当访问数据库配置、数据库操作、使用Flask扩展如Flask-Migrate、发送邮件、日志记录、测试代码等时都需要使用到应用上下文。

解释
  1. :想象你的 Flask 应用就像一栋房子,它包含了很多资源和功能,比如厨房、客厅、书房等,这些都是需要在特定情况下使用的。

  2. 房间app.app_context() 可以看作是打开某个特定的房间(例如厨房)。一旦你进入这个房间,就可以使用厨房里的所有工具,例如锅、刀具和食材。

  3. 工具和资源:在房间内,你有权限访问某些工具和资源:

    • current_app:代表当前正在运行的 Flask 应用,相当于厨房里的食材。

    • 数据库连接:在上下文中,您可以安全地操作数据库,类似于在厨房里做饭的过程。

  4. 离开房间:一旦你完成了任务并退出 with 块,房间就关闭了,你就无法再访问厨房里的工具(如 current_app 或数据库连接),这就保护了资源,确保它们不会被随意使用。

    from flask import Flask, current_app
    
    app = Flask(__name__)
    
    # 使用应用上下文
    with app.app_context():
        # 现在你可以访问 current_app
        print("当前应用名:", current_app.name)
        
        # 执行其他与应用相关的操作,比如配置或数据库操作
        # 例如:db.create_all() 等等
        
    # 离开上下文后,current_app 不再可用
    

5.执行CRUD操作(增删查改)
创建(create)
new_user = User(username='alice', email='alice@example.com')
db.session.add(new_user)  # 将用户添加到会话中
db.session.commit()  # 提交事务
读取(read)
user = User.query.filter_by(username='alice').first()  # 查询用户
print(user)
更新(update) 
user.email = 'alice_new@example.com'  # 更新用户的邮箱
db.session.commit()  # 提交更新
删除(delete)
db.session.delete(user)  # 删除用户
db.session.commit()  # 提交删除
6.运行应用
if __name__ == '__main__':
    app.run(debug=True)

欢迎各位大佬指正!感谢!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐