Erlo

大白话说Python+Flask入门(六)Flask SQLAlchemy操作mysql数据库

2023-12-06 21:29:38 发布   78 浏览  
页面报错/反馈
收藏 点赞

写在前面

这篇文章被搁置真的太久了,不知不觉拖到了周三了,当然,也算跟falsk系列说再见的时候,真没什么好神秘的,就是个数据库操作,就大家都知道的CRUD吧。

Flask SQLAlchemy的使用

1、Flask SQLAlchemy简介

Flask SQLAlchemy 是基于 Flask web 框架和 SQLAlchemy ORM(对象关系映射)的工具。它旨在为 Flask web 应用程序提供更方便的数据库操作。SQLAlchemy 本身是一个全功能的 ORM,而 Flask-SQLAlchemy 是在此基础上为 Flask 应用程序提供了一些额外的功能。

2、安装Flask-SQLAlchemy

pip install flask-sqlalchemy

3、举个栗子

后端业务代码如下:

import pymysql
from flask import Flask, request, flash, url_for, redirect, render_template
from flask_sqlalchemy import SQLAlchemy

from flask_case.config import Config

pymysql.install_as_MySQLdb()

# 实例化一个flask对象
app = Flask(__name__)
# 设置一个密钥
app.secret_key = 'a_secret_key'
# 从配置对象中加载配置信息
app.config.from_object(Config)
# 创建SQLAlchemy对象
db = SQLAlchemy(app)

class books(db.Model):
    id = db.Column('student_id', db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    price = db.Column(db.String(50))

    def __init__(self, name, price):
        self.name = name
        self.price = price





@app.route('/')
def show_all():
    return render_template('show_all.html', books=books.query.all())


@app.route('/add', methods=['GET', 'POST'])
def add():
    if request.method == 'POST':
        if not request.form['name'] or not request.form['price']:
            flash('输入项不能为空!', 'error')
        else:
            book = books(request.form['name'], request.form['price'])
            print(book)
            db.session.add(book)
            db.session.commit()
            flash('新书上架成功!')
            return redirect(url_for('show_all'))
    return render_template('add.html')


if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

新增书页面add.html,示例代码如下:



   

      

Flask SQLAlchemy Demo


{%- for category, message in get_flashed_messages(with_categories = true) %}
{{ message }}
{%- endfor %}




书单列表页show_all.html,示例代码如下:



   
   
      
      

Flask SQLAlchemy Demo


{%- for message in get_flashed_messages() %} {{ message }} {%- endfor %}

Books (Add Book )

{% for book in books %} {% endfor %}
name price
{{ book.name }} {{ book.price }}

4、效果

5、知识点

CRUD操作:

  • db.session.add (模型对象) - 将记录插入到映射表中
  • db.session.delete (模型对象) - 从表中删除记录
  • model.query.all()  - 从表中检索所有记录(对应于SELECT查询)。

写在最后

在写这部分文章时候,总感觉它跟mybatis很像,比如可以将数据从数据库映射到对象,支持创建数据库表和定义数据模型,并提供了相应的接口及对应事务的操作,直白点说,不用手撕sql

但就性能来看的话,还是MyBatis好,毕竟是持久层框架,哈哈!

优秀不够,你是否无可替代

软件测试交流QQ群:721256703,期待你的加入!!

欢迎关注我的微信公众号:软件测试君


登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认