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实现的自定义访问日志模块示例
Jun 23 Python
Python批量发送post请求的实现代码
May 05 Python
对Python中9种生成新对象的方法总结
May 23 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
用Anaconda安装本地python包的方法及路径问题(图文)
Jul 16 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
PyQt5 界面显示无响应的实现
Mar 26 Python
了解一下python内建模块collections
Sep 07 Python
Python常用断言函数实例汇总
Nov 30 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
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
php异常处理捕获错误整理
2019/09/23 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2019/10/15 PHP
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
python黑魔法之参数传递
2016/02/12 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
2013的个人自我评价
2013/12/26 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
应用外语系自荐信
2014/06/26 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
大学运动会通讯稿
2015/07/18 职场文书