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 相关文章推荐
关于反爬虫的一些简单总结
Dec 13 Python
python实现拓扑排序的基本教程
Mar 11 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
python实现ip代理池功能示例
Jul 05 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
用python写爬虫简单吗
Jul 28 Python
简述python&amp;pytorch 随机种子的实现
Oct 07 Python
python递归函数用法详解
Oct 26 Python
python 实现IP子网计算
Feb 18 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 ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
Django 再谈一谈json序列化
2020/03/16 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
电大自我鉴定
2013/10/27 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
创业资金计划书
2014/02/06 职场文书
先进工作者获奖感言
2014/02/08 职场文书
行政部岗位职责范本
2014/03/13 职场文书
导师工作推荐信范文
2014/05/17 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
公司介绍信范文
2015/01/31 职场文书
禁毒心得体会范文
2016/01/15 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers