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


    写在前面

    这篇文章被搁置真的太久了,不知不觉拖到了周三了,当然,也算跟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,示例代码如下:

    html>
    <html>
       <body>
    
          <h3>Flask SQLAlchemy Demoh3>
          <hr/>
    
          {%- for category, message in get_flashed_messages(with_categories = true) %}
             <div class = "alert alert-danger">
                {{ message }}
             div>
          {%- endfor %}
    
          <form action = "{{ request.path }}" method = "post">
             <label for = "name">namelabel><br>
             <input type = "text" name = "name" placeholder = "name" /><br>
             <label for = "price">pricelabel><br>
             <input type = "text" name = "price" placeholder = "price" /><br>
             <input type = "submit" value = "Submit" />
          form>
    
       body>
    html>

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

    html>
    <html lang = "en">
       <head>head>
       <body>
          
          <h3>
             <a href = "{{ url_for('show_all') }}">Flask
                SQLAlchemy Demoa>
          h3>
          
          <hr/>
          {%- for message in get_flashed_messages() %}
             {{ message }}
          {%- endfor %}
           
          <h3>Books (<a href = "{{ url_for('add') }}">Add Book
             a>)h3>
          
          <table>
             <thead>
                <tr>
                   <th>nameth>
                   <th>priceth>
                tr>
             thead>
             
             <tbody>
                {% for book in books %}
                   <tr>
                      <td>{{ book.name }}td>
                      <td>{{ book.price }}td>
                   tr>
                {% endfor %}
             tbody>
          table>
          
       body>
    html>

    4、效果

    5、知识点

    CRUD操作:

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

    写在最后

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

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


    __EOF__

  • 本文作者: 久曲健的测试窝
  • 本文链接: https://www.cnblogs.com/longronglang/p/17880559.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    vue中的模板语法
    BioVendor sRAGE Elisa试剂盒化学性质和技术研究
    FreeRTOS个人笔记-事件
    GGTalk 开源即时通讯系统源码剖析之:客户端全局缓存及本地存储
    antv系列图引擎X6、G6比对选择,并实现vue实例ER图
    三维跨孔电磁波CT数据可视化框架搭建
    个人健康|个人健康管理小程序|基于微信小程序的个人健康管理系统设计与实现(源码+数据库+文档)
    Spring Boot集成支付宝电脑网站支付功能
    圆通山美食城旅游发展总体规划
    【笔试刷题训练】day_15
  • 原文地址:https://www.cnblogs.com/longronglang/p/17880559.html