flask框架配置mysql数据库操作详解
作者:LuckyQueen0928 发布时间:2024-01-14 05:31:57
本文实例讲述了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
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()
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
localhost:5000/admin/add
希望本文所述对大家基于flask框架的Python程序设计有所帮助。
来源:https://blog.csdn.net/LuckyQueen0928/article/details/78653275


猜你喜欢
- 本文实例讲述了JavaScript获取一个范围内日期的方法。分享给大家供大家参考。具体分析如下:指定开始和结束时间,范围该范围内的所有日期放
- vue3 项目封装侧导航文字骨架效果组件-全局封装,供大家参考,具体内容如下目的当显示页面的时候,有些数据是需要从后台加载,网络不好的时候可
- 链表链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结
- 佛爷去了公司的年夜饭,我有点无聊就在公司 Coding 点东西玩玩,于是就有了这玩意。请允许我很猥·琐得将这个游戏称之为“是男人坚持 100
- 首先我们来看看原图:接着我们来看看效果图:通过分析我们不难发现以下特征:主要颜色为黑白灰边界线条较重相同或相近色趋于白色略有光源效果需要用到
- 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对他也是非常熟悉了。 虽然如此,还是经常有人问我下面的几种写法有什么
- 目录连接池是什么?为什么需要连接池?连接池的原理是什么?使用python语言自制简易mysql连接池开始使用自定义配置文件名 & 配
- 方法1: 用SET PASSWORD命令 首先登录MySQL。 格式:mysql> set password for 用户名@loca
- 一、必备技能1、logging模块的使用(1)5个日志等级/以及5个输出日志的内置函数(2)日志收集器、日志输出渠道的概念(3)如何自定义日
- 在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScrip
- 如下所示:#!/usr/bin/python# -*- coding: utf-8 -*-def rever(sentence): &nbs
- 纪念我的第一个爬虫程序,一共写了三个白天,其中有两个上午没有看,中途遇到了各种奇怪的问题,伴随着他们的解决,对于一些基本的操作也弄清楚了。果
- RSS是 Really Simple Syndication的缩写(对rss2.0而言,是这三个词的缩写,对rss1.0而言则是RDF Si
- 1.变量的输入:input函数:input()input("请输入银行卡密码")password = input(&qu
- 关于 pynput pynput 可以监控我们的键盘和鼠标。目前具有此类功能的库有很多,比如 pygame 等游戏库,但是当我们只需要
- 对于Linux用户来说,命令行的名声相当的高。不像其他操作系统,命令行是一个可怕的命题,但是对于Linux社区中那些经验丰富的大牛,命令行却
- 前言本文的内容是总结一些MySQL的常见使用技巧,以供没有DBA的团队参考。如无特殊说明,存储引擎以InnoDB为准。MySQL的特点了解M
- 本文实例讲述了python中管道用法。分享给大家供大家参考。具体如下:#!coding=utf-8import multiprocessin
- 这本来是翻译Estelle Weyl的《15 JavaScript Gotchas》,里面介绍的都是在JavaScript编程实践中平时容易
- 说明本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时发出提醒(音频文件自己定义位置)并自动弹开页面(URL自己定义)。同时还可以通