大白话说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
,示例代码如下:
<!DOCTYPE html>
<html>
<body>
<h3>Flask SQLAlchemy Demo</h3>
<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">name</label><br>
<input type = "text" name = "name" placeholder = "name" /><br>
<label for = "price">price</label><br>
<input type = "text" name = "price" placeholder = "price" /><br>
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
书单列表页show_all.html
,示例代码如下:
<!DOCTYPE html>
<html lang = "en">
<head></head>
<body>
<h3>
<a href = "{{ url_for('show_all') }}">Flask
SQLAlchemy Demo</a>
</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>name</th>
<th>price</th>
</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
好,毕竟是持久层框架,哈哈!
大白话说Python+Flask入门(六)Flask SQLAlchemy操作mysql数据库的更多相关文章
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
- 13、Flask实战第13天:SQLAlchemy操作MySQL数据库
安装MySQL 在MySQL官网下载win版MySQL 双击运行 后面根据提示设置密码然后启动即可,这里我设置的密码是:123456 我们可以通过Navicat客户端工具连接上MySQL addres ...
- python简说(十七)操作mysql数据库
import pymysqlconn = pymysql.connect(host='118.24.3.40',user='jxz',password='123456',port=3306,db='j ...
- Python工具类(一)—— 操作Mysql数据库
如何调用直接看__main__函数里如何调用此工具类就阔以啦! # encoding=utf-8 import pymysql # 导入所有Mysql配置常量,请自行指定文件 from conf.se ...
- Python学习笔记_02:使用Tkinter连接MySQL数据库实现登陆注册功能
1 环境搭建 1.1 Python安装 1.2 MySQL环境搭建 1.3安装MySQLdb 2 具体实现 2.1 登陆界面 2.2 注册界面 2.3 具体实现部分代码 1 环境搭建 1.1 P ...
- Python爬虫入门六之Cookie的使用
大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...
- python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...
- python使用sqlalchemy连接mysql数据库
环境:centos7+python2.7.5+sqlalchemy sqlalchemy是python当中比较出名的orm程序.在python中,使用sqlalchemy连接mysql数据库进行操作非 ...
- Python MySQLdb模块连接操作mysql数据库实例_python
mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...
- Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁
Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...
随机推荐
- Three.js中实现碰撞检测
1. 引言 碰撞检测是三维场景中常见的需求,Three.js是常用的前端三维JavaScript库,本文就如何在Three.js中进行碰撞检测进行记述 主要使用到的方法有: 射线法Raycaster ...
- 03.前后端分离中台框架 zhontai 项目代码生成器的使用
zhontai 项目 基于 .Net7.x + Vue 等技术的前后端分离后台权限管理系统,想你所想的开发理念,希望减少工作量,帮助大家实现快速开发 后端地址:https://github.com/z ...
- Windows 虚拟地址 到底是如何映射到 物理地址 的?
一:背景 1. 讲故事 我发现有很多的 .NET程序员 写了很多年的代码都没弄清楚什么是 虚拟地址,更不用谈什么是 物理地址 以及Windows是如何实现地址映射的了?这一篇我们就来聊一聊这两者之间的 ...
- PyAV 使用浅谈
背景: PyAV是一个用于音频和视频处理的Python库,它提供了一个简单而强大的接口,用于解码.编码.处理和分析各种音频和视频格式.PyAV基于FFmpeg多媒体框架,它本质上是FFmpeg 的Py ...
- MinIO分布式部署
目录 先决条件 网络和防火墙 网络 防火墙 负载均衡 顺序的主机名 驱动器要求 XFS格式性能最优 最小IO 顺序的驱动器名 任意迁移 时间同步 考虑 相同的硬软件环境 存储容量规划 推荐的操作系统 ...
- 「luogu - P4126」「ahoi 2009」最小割
link. 也许题不错,反正有点降智- 先给结论,在 \[V_N=V \\ E_N=E \\ c(x,y)=w(x,y) \] 的流网络中: 可行边:在增广完的 induced subgraph 中, ...
- ERROR: <bits/stdc++.h>, 'cstdalign' file not found, running C++17
Modified 1 year, 1 month ago Viewed 9k times 4 I'm trying to run a piece of code in Visual Studio Co ...
- Linux第二次周总结
第三章 用户管理 3.1 用户/组概览 Linux系统是多用户.多任务的分时操作系统,系统上每一个进程都有一个特定的文件,每个文件都被一个特定的用户所拥有.每个用户都属于一个用户组或者多个组,系统可以 ...
- slice简介
简介 Go语言中的切片(slice)是一种灵活的数据结构,它构建在数组之上并提供了方便的方式来操作数组的一部分.切片的底层实现涉及到数组和一些元数据.以下是Golang切片的底层实现的详细介绍: 底层 ...
- 详述Java内存屏障,透彻理解volatile
一般来说内存屏障分为两层:编译器屏障和CPU屏障,前者只在编译期生效,目的是防止编译器生成乱序的内存访问指令:后者通过插入或修改特定的CPU指令,在运行时防止内存访问指令乱序执行. 下面简单说一下这两 ...