翼度科技»论坛 编程开发 python 查看内容

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

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
写在前面

这篇文章被搁置真的太久了,不知不觉拖到了周三了,当然,也算跟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、举个栗子

后端业务代码如下:
  1. import pymysql
  2. from flask import Flask, request, flash, url_for, redirect, render_template
  3. from flask_sqlalchemy import SQLAlchemy
  4. from flask_case.config import Config
  5. pymysql.install_as_MySQLdb()
  6. # 实例化一个flask对象
  7. app = Flask(__name__)
  8. # 设置一个密钥
  9. app.secret_key = 'a_secret_key'
  10. # 从配置对象中加载配置信息
  11. app.config.from_object(Config)
  12. # 创建SQLAlchemy对象
  13. db = SQLAlchemy(app)
  14. class books(db.Model):
  15.     id = db.Column('student_id', db.Integer, primary_key=True)
  16.     name = db.Column(db.String(100))
  17.     price = db.Column(db.String(50))
  18.     def __init__(self, name, price):
  19.         self.name = name
  20.         self.price = price
  21. @app.route('/')
  22. def show_all():
  23.     return render_template('show_all.html', books=books.query.all())
  24. @app.route('/add', methods=['GET', 'POST'])
  25. def add():
  26.     if request.method == 'POST':
  27.         if not request.form['name'] or not request.form['price']:
  28.             flash('输入项不能为空!', 'error')
  29.         else:
  30.             book = books(request.form['name'], request.form['price'])
  31.             print(book)
  32.             db.session.add(book)
  33.             db.session.commit()
  34.             flash('新书上架成功!')
  35.             return redirect(url_for('show_all'))
  36.     return render_template('add.html')
  37. if __name__ == '__main__':
  38.     with app.app_context():
  39.         db.create_all()
  40.     app.run(debug=True)
复制代码
新增书页面add.html,示例代码如下:
  1. <!DOCTYPE html>
  2. <html>
  3.    <body>
  4.       <h3>Flask SQLAlchemy Demo</h3>
  5.       <hr/>
  6.       {%- for category, message in get_flashed_messages(with_categories = true) %}
  7.          
  8.             {{ message }}
  9.          
  10.       {%- endfor %}
  11.       <form action = "{{ request.path }}" method = "post">
  12.          <label for = "name">name</label><br>
  13.          <input type = "text" name = "name" placeholder = "name" /><br>
  14.          <label for = "price">price</label><br>
  15.          <input type = "text" name = "price" placeholder = "price" /><br>
  16.          <input type = "submit" value = "Submit" />
  17.       </form>
  18.    </body>
  19. </html>
复制代码
书单列表页show_all.html,示例代码如下:
  1. <!DOCTYPE html>
  2. <html lang = "en">
  3.    <head></head>
  4.    <body>
  5.       
  6.       <h3>
  7.          <a target="_blank" href = "{{ url_for('show_all') }}">Flask
  8.             SQLAlchemy Demo</a>
  9.       </h3>
  10.       
  11.       <hr/>
  12.       {%- for message in get_flashed_messages() %}
  13.          {{ message }}
  14.       {%- endfor %}
  15.       
  16.       <h3>Books (<a target="_blank" href = "{{ url_for('add') }}">Add Book
  17.          </a>)</h3>
  18.       
  19.       <table>
  20.          <thead>
  21.             <tr>
  22.                <th>name</th>
  23.                <th>price</th>
  24.             </tr>
  25.          </thead>
  26.          
  27.          <tbody>
  28.             {% for book in books %}
  29.                <tr>
  30.                   <td>{{ book.name }}</td>
  31.                   <td>{{ book.price }}</td>
  32.                </tr>
  33.             {% endfor %}
  34.          </tbody>
  35.       </table>
  36.       
  37.    </body>
  38. </html>
复制代码
4、效果



5、知识点

CRUD操作:

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

在写这部分文章时候,总感觉它跟mybatis很像,比如可以将数据从数据库映射到对象,支持创建数据库表和定义数据模型,并提供了相应的接口及对应事务的操作,直白点说,不用手撕sql。
但就性能来看的话,还是MyBatis好,毕竟是持久层框架,哈哈!

来源:https://www.cnblogs.com/longronglang/p/17880559.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具