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

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程序设计有所帮助。

来源:https://blog.csdn.net/LuckyQueen0928/article/details/78653275

标签:flask,mysql数据库
0
投稿

猜你喜欢

  • 随Linux开机自动启动mysql

    2009-12-29 10:14:00
  • Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客

    2024-04-26 17:37:08
  • Python读写Redis数据库操作示例

    2024-01-13 02:09:05
  • Pytorch DataLoader 变长数据处理方式

    2022-08-06 23:07:50
  • Python利用Django如何写restful api接口详解

    2022-11-16 13:26:32
  • vue中watch监听器用法之deep、immediate、flush

    2024-04-27 16:13:35
  • CSS在页面布局中实现div水平居中的方法总结

    2008-06-03 12:09:00
  • js 删除数组的几种方法小结

    2024-04-22 22:42:37
  • Django调用支付宝接口代码实例详解

    2023-07-19 10:53:51
  • Python中isnumeric()方法的使用简介

    2023-05-23 19:25:23
  • PPOCRLabel标注的txt格式如何转换成labelme能修改的json格式

    2021-08-31 06:01:45
  • python序列类型种类详解

    2022-02-27 13:53:38
  • python批量更改目录名/文件名的方法

    2022-04-01 11:25:37
  • Pycharm 如何一键加引号的方法步骤

    2022-09-11 19:19:34
  • mysqldumpslow用法示例(慢查询)

    2024-01-15 22:42:03
  • Python实现敏感词过滤的4种方法

    2021-10-01 06:21:08
  • tkinter如何获取复选框(Checkbutton)的值

    2023-10-01 22:41:35
  • python中xrange和range的区别

    2023-03-14 05:54:35
  • Python数值方法及数据可视化

    2021-07-26 17:32:51
  • 如何使用Python基于接口编程的方法实现

    2023-12-24 20:15:41
  • asp之家 网络编程 m.aspxhome.com