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 相关文章推荐
在Python中处理字符串之isdigit()方法的使用
May 18 Python
详解在Python的Django框架中创建模板库的方法
Jul 20 Python
详解Django中的权限和组以及消息
Jul 23 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
Python实现Dijkstra算法
Oct 17 Python
pytorch使用Variable实现线性回归
May 21 Python
用python3 返回鼠标位置的实现方法(带界面)
Jul 05 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 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 str_pad 函数用法简介
2009/07/11 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
javascript控制台详解
2015/06/25 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python实现文件名批量替换和内容替换
2014/03/20 Python
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
在django中使用自定义标签实现分页功能
2017/07/04 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
Python列表(List)知识点总结
2019/02/18 Python
简单了解python关系(比较)运算符
2019/07/08 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
大一新生军训时的自我评价分享
2013/12/05 职场文书
寒假家长评语大全
2014/04/16 职场文书
旅游节目策划方案
2014/05/26 职场文书
房屋过户委托书范本
2014/10/07 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers