flask框架配置mysql数据库操作详解


Posted in Python onNovember 29, 2019

本文实例讲述了flask框架配置mysql数据库操作。分享给大家供大家参考,具体如下:

该篇博客配置环境为:python版本3.5,flask2.0,python3中已经不再支持MySQLdb模块,所有这里我用了pymysql,所有使用前应该

安装pymysql:

pip install pymysql

在网上的好多资料都给的是使用sqlite的例子,由于很不喜欢所以今天分享一下flask-sqlalchemy操作mysql的方法.

以前习惯使用sqlalchemy,后来发现使用flask-sqlchemy还是要简单一些(起码省去了好多模块和类的导入,create_engine,sessionmaker,declarative。。。)不过flask官方的例子用的是sqlchemy,去官网, flask-sqlalchemy官方文档

这里写一个简单的flask web程序,来说明flask-sqlalchemy如何驱动msyql数据库.为了偷懒,这个例子以上一篇博文flask蓝图的使用为基础.

首先看一下程序结构:

相比上一节只多了两个文件,create_db.py,models.py

flask框架配置mysql数据库操作详解

1.建立mysql和app的连接

在config.py中加入以下两项配置:

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:xxxxx@localhost:3306/test?charset=utf8'
SQLALCHEMY_TRACK_MODIFICATIONS = True

如此在app/__init__.py中加入

app.config.from_object('config')
db = SQLAlchemy(app)

就可以完成app和数据的关联,并生成一个可以操作app数据库的SQLAlchemy实例db

完整的app/__init__.py代码如下:

from flask import Flask, url_for, request, redirect, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
from app import models,views

2.创建app/models.py模块

上代码

from app import db #db是在app/__init__.py生成的关联后的SQLAlchemy实例

class User(db.Model):
 __tablename__ = 'users'
 id = db.Column(db.Integer, primary_key=True)
 username = db.Column(db.String(80), unique=True)
 email = db.Column(db.String(320), unique=True)
 password = db.Column(db.String(32), nullable=False)
 def __repr__(self):
  return '<User %r>' % self.username
class Admin(db.Model):
 __tablename__ = 'admins'
 id = db.Column(db.Integer, primary_key=True)
 username = db.Column(db.String(80), unique=True)
 email = db.Column(db.String(320), unique=True)
 password = db.Column(db.String(32), nullable=False)
 def __repr__(self):
  return '<User %r>' % self.username

3.创建create_db.py,表结构设计完成后执行python create_db.py即可完成表的创建,如下图

#app/create_db.py

from app import db
db.create_all()

flask框架配置mysql数据库操作详解

4.表已经创建完成了,接下来是我们的业务逻辑使用表的时候了

分别在user和admin蓝图中增加一个add用户的业务

#app/user.py

from flask import Blueprint, render_template, redirect,request
from app import db
from .models import User
user = Blueprint('user',__name__)
@user.route('/index')
def index():
 return render_template('user/index.html')
@user.route('/add/',methods=['GET','POST'])
def add():
 if request.method == 'POST':
  p_user = request.form.get('username',None)
  p_email = request.form.get('email',None)
  p_password = request.form.get('password',None)
  if not p_user or not p_email or not p_password:
   return 'input error'
  newobj = User(username=p_user, email=p_email, password=p_password)
  db.session.add(newobj)
  db.session.commit()
  users = User.query.all()
  return render_template('user/add.html',users=users)
 users = User.query.all()
 return render_template('user/add.html',users=users)
@user.route('/show')
def show():
 return 'user_show'

#app/admin.py

#admin.py
from flask import Blueprint,render_template, request, redirect
from app import db
from .models import Admin
admin = Blueprint('admin',__name__)
@admin.route('/index')
def index():
 return render_template('admin/index.html')
@admin.route('/add/',methods=['POST','GET'])
def add():
 if request.method == 'POST':
  p_admin = request.form.get('username',None)
  p_email = request.form.get('email',None)
  p_password = request.form.get('password',None)
  if not p_admin or not p_email or not p_password:
   return 'input error'
  newobj = Admin(username=p_admin, email=p_email, password=p_password)
  db.session.add(newobj)
  db.session.commit()
  admins = Admin.query.all()
  return render_template('admin/add.html',admins=admins)
 admins = Admin.query.all()
 return render_template('admin/add.html',admins=admins)
@admin.route('/show')
def show():
 return 'admin_show'

#app/templates/admin/add.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>AdminsAdd</title>
</head>
<body>
<form action="/admin/add/" method="POST">
 user:<input type="text" name="username" />
 email:<input type="text" name="email" />
 pwd:<input type="password" name="password" />
 <input type="submit" value="add" />
</form>
{% if admins %}
<table border="1px">
 <tr>
  <th>UserName</th>
  <th>Email</th>
 </tr>
 {% for u in admins %}
  <tr>
   <td>{{u.username}}</td>
   <td>{{u.email}}</td>
  </tr>
 {% endfor %}
</table>
{% endif %}
</body>
</html>

#app/templates/user/add.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>UserAdd</title>
</head>
<body>
<form action="/user/add/" method="POST">
 user:<input type="text" name="username" />
 email:<input type="text" name="email" />
 pwd:<input type="password" name="password" />
 <input type="submit" value="add" />
</form>
{% if users %}
<table border="1px">
 <tr>
  <th>UserName</th>
  <th>Email</th>
 </tr>
 {% for u in users %}
  <tr>
   <td>{{u.username}}</td>
   <td>{{u.email}}</td>
  </tr>
 {% endfor %}
</table>
{% endif %}
</body>
</html>

#app/views.py

from app import app
from .admin import admin
from .user import user
app.register_blueprint(admin,url_prefix='/admin')
app.register_blueprint(user, url_prefix='/user')

#run.py

from app import app
app.run()

到这里也就结束了,这样这个例子就结合了蓝图和flask-sqlalchemy.本例中只使用了db.session.add(),其它的还有db.session.delete()...

看一下效果:

localhost:5000/user/add

flask框架配置mysql数据库操作详解

localhost:5000/admin/add

flask框架配置mysql数据库操作详解

flask框架配置mysql数据库操作详解

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Python中格式化format()方法详解
Apr 01 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
Python 串口读写的实现方法
Jun 12 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
Aug 02 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
Python基于WordCloud制作词云图
Nov 29 #Python
Python实现栈和队列的简单操作方法示例
Nov 29 #Python
python调用函数、类和文件操作简单实例总结
Nov 29 #Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 #Python
python实现把两个二维array叠加成三维array示例
Nov 29 #Python
python的time模块和datetime模块实例解析
Nov 29 #Python
python实现将一维列表转换为多维列表(numpy+reshape)
Nov 29 #Python
You might like
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
php验证码生成器
2017/05/24 PHP
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
JavaScript手机振动API
2016/06/11 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python使用MONGODB入门实例
2015/05/11 Python
详解python eval函数的妙用
2017/11/16 Python
Python机器学习之决策树算法
2017/12/22 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python numpy 点数组去重的实例
2018/04/18 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
python输入中文的实例方法
2020/09/14 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
理工大学毕业生自荐信
2013/11/01 职场文书
培训班主持词
2014/03/28 职场文书
超市优秀员工获奖感言
2014/08/15 职场文书
文明单位汇报材料
2014/12/24 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
房屋质量投诉书
2015/07/02 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server