Flask框架内容基础4 连接数据库及orm模型与表的映射

一、连接mysql数据库:

使用连接mysql的工具库是pymysql

pip install pymysql 

补充:本人在安装过程中出现的问题 作一下补充

1.出现timeout错误,导致下载工具失败。

由于网速较慢,pip默认下载时长为100秒,时间到没有下载完成强制关闭连接,导致下载失败。

解决办法:更换镜像或者增加下载时长

pip install --default timeout = 100000 pymysql

2.问题描述

代码不报错,但是运行程序时报出缺失库的问题:

然后输入安装命令时,显示需要的工具库已经存在,造成这样的原因是由于使用python虚拟解释器时,当前解释器内没有该工具库,但是在其他的环境中,已经下载了这个工具库。

解决方式:在安装库的命令后添加虚拟环境的路径:

pip install pymysql  -- target [虚拟环境路径]

另外还需要另一个工具包Flask-SQLAlchemy,SQLAlchemy提供ORM技术,类似于操作普通Python对象一样去操作数据库,达到增删改查的效果。而Flask-SQLAlchemy是封装了SQLAlchemy,使得在flask中使用SQLAlchemy更为方便。

(看AI怎么说)

Flask-SQLAlchemy是一个Flask扩展,用于在Flask应用中使用SQLAlchemy进行数据库操作。SQLAlchemy是一个强大的Python SQL工具包和对象关系映射(ORM)库,它提供了一种方便的方式来操作数据库,同时也能够提供高级的查询和模型映射功能。Flask-SQLAlchemy简化了在Flask应用中使用SQLAlchemy的过程,提供了一些方便的功能,例如自动管理数据库会话和事务,以及提供了一些Flask特定的扩展,如Flask-Migrate用于数据库迁移。通过集成Flask-SQLAlchemy,可以更方便地在Flask应用中进行数据库操作。

配置代码:

app_config = Flask(__name__)
# MYSQL所在的主机名
HOSTNAME = '127.0.0.1'
# mysql监听的端口号,默认3306
PORT = 3306
# 连接mysql的用户名,读者用自己的用户名
USERNAME = 'root'
# 连接mysql的密码,读者用自己的密码
PASSWORD = '123456'
# MYSQL的数据库名称
DATABASE = 'reception_program'

app.config[
    'SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"

# 在app.config中设置好连接数据库的信息
# 然后使用SQLAlchemy(app)创建一个db对象
# SQLAlchemy会自动读取app.config中连接数据库信息


db =SQLAlchemy(app_config)

二、orm与数据库的映射:

首先orm是什么:

ORM (Object-Relational Mapping)是一种技术,用于将对象和关系型数据库之间进行映射。它将数据库中的表映射为对象的属性,将数据库中的行映射为对象的实例。ORM框架使得开发人员可以通过编写面向对象的代码来操作数据库,而不需要直接使用SQL语句。ORM框架提供了一系列的API和工具,用于执行数据库的增删改查操作,并处理对象与数据库之间的映射和转换。常见的ORM框架有Hibernate、Django ORM和Entity Framework等。

所以我们需要创建与数据库关联的模型model,下面是我创建出的案例:

from reception_master.app import db


class ReceptionModel(db.Model):
    """
        映射表格
        """
    __tablename__ = "reception_info"
    reception_id = db.Colum(db.Integer, primary_key=True)
    customer_name = db.Colum(db.String(50), nullable=False)
    collection_content = db.Colum(db.String(50), nullable=False)
    amount = db.Colum(db.Decimal(10, 2), nullable=False)
    amount_c = db.Colum(db.String(50), nullable=False)
    abstract = db.Colum(db.String(50), nullable=False)
    amount_method = db.Colum(db.String(50), nullable=False)
    collection_people = db.Colum(db.String(50), nullable=False)
    invoicing_people = db.Colum(db.String(50), nullable=False)
    check_people = db.Colum(db.String(50), nullable=False)
    invoicing_time = db.Colum(db.Datetime, nullable=False)
    status = db.Colum(db.Integer, nullable=False)
    deposit_bank = db.Colum(db.String(50), nullable=False)
    bank_account = db.Colum(db.String(20), nullable=False)

可以利用模型直接在数据库生成表。

db.create_all()

如果出现上下文连接异常问题,可以with app.app_context:

三、实现增删改查:

1.增

@app.route("/users/create", methods=["GET", "POST"])
def user_create():
    if request.method == "POST":
        user = User(
            username=request.form["username"],
            email=request.form["email"],
        )
        db.session.add(user)
        db.session.commit()
        return redirect(url_for("user_detail", id=user.id))

    return render_template("user/create.html")

2.删

@app.route("/user/<int:id>/delete", methods=["GET", "POST"])
def user_delete(id):
    user = db.get_or_404(User, id)

    if request.method == "POST":
        db.session.delete(user)
        db.session.commit()
        return redirect(url_for("user_list"))

    return render_template("user/delete.html", user=user)

3.改

@app.route("/user/<int:id>")
def user_detail(id):
    user = db.get_or_404(User, id)
    return render_template("user/detail.html", user=user)

4.查

@app.route("/users")
def user_list():
    users = db.session.execute(db.select(User).order_by(User.username)).scalars()
    return render_template("user/list.html", users=users)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值