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 字符串格式化代码
Mar 17 Python
python3访问sina首页中文的处理方法
Feb 24 Python
Python 元组(Tuple)操作详解
Mar 11 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
Python使用turtule画五角星的方法
Jul 09 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
python决策树之C4.5算法详解
Dec 20 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
Django工程的分层结构详解
Jul 18 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
浅析Python中的套接字编程
Jun 22 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设计模式之命令模式的应用详解
2013/05/21 PHP
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
Javascript中Eval函数的使用
2010/03/23 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
JS删除String里某个字符的方法
2021/01/06 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Python isinstance函数介绍
2015/04/14 Python
python的依赖管理的实现
2019/05/14 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
餐饮总经理岗位职责
2014/03/07 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
创优争先心得体会
2014/09/11 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript