flask 框架操作MySQL数据库简单示例


Posted in Python onFebruary 02, 2020

本文实例讲述了flask 框架操作MySQL数据库。分享给大家供大家参考,具体如下:

一、创建数据库表格

"""
Created on 19-10-8
@requirement:Anaconda 4.3.0 (64-bit) Python3.6
@description:创建表格
"""
import pymysql
server = '127.0.0.1'
user = 'root'
password = 'password'
# 连接数据库
conn = pymysql.connect(server, user, password, database='information_collection') # 获取连接
cursor = conn.cursor() # 获取游标
# "**ENGINE=InnoDB DEFAULT CHARSET=utf8**"-创建表的过程中增加这条,中文就不是乱码
# 创建表
cursor.execute("""
CREATE TABLE if not exists user(
   user_id INT NOT NULL auto_increment primary key,
   user_name VARCHAR(100),
   user_password VARCHAR(100),
   user_nickname VARCHAR(100),
   user_email VARCHAR(100)
   )
   ENGINE=InnoDB DEFAULT CHARSET=utf8
 """)
# 查询数据库表user内容
cursor.execute('SELECT * FROM user')
# 查看一行 多行:cursor.fetchall()
row = cursor.fetchone()
print(row)
# if row[0] is None:
#   row0 = list(row)
#   row0[0] = 0
#   row = tuple(row0)
# # 插入数据,注:与sqlserver有些区别
cursor.execute("INSERT INTO user VALUES('%s','%s','%s','%s')" % ('xiaoming','qwe','ming','@163.com'))
# 提交数据,才会写入表格
conn.commit()
# 关闭游标关闭数据库
cursor.close()
conn.close()

二、flask操作mysql

"""
Created on 19-10-8
@requirement:Anaconda 4.3.0 (64-bit) Python3.6
@description:
"""
from flask_sqlalchemy import SQLAlchemy
from flask import Flask, jsonify, request
import configparser
import os
app = Flask(__name__)
# 使用ConfigParser 首选需要初始化实例,并读取配置文件:
my_config = configparser.ConfigParser()
my_config.read('db.conf')
# 连接数据库information_collection
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DEV_DATABASE_URL') or \
               "mysql+pymysql://root:password@127.0.0.1:3306/information_collection"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
mydb = SQLAlchemy()
mydb.init_app(app)
# 用户模型
class User(mydb.Model):
  user_id = mydb.Column(mydb.Integer, primary_key=True)
  user_name = mydb.Column(mydb.String(60), nullable=False)
  user_password = mydb.Column(mydb.String(30), nullable=False)
  user_nickname = mydb.Column(mydb.String(50))
  user_email = mydb.Column(mydb.String(30), nullable=False)
  def __repr__(self):
    return '<User %r>' % self.user_name
# 获取用户列表,所有数据
@app.route('/users', methods=['GET'])
def getUsers():
  data = User.query.all()
  datas = []
  for user in data:
    datas.append({'user_id': user.user_id, 'user_name': user.user_name, 'user_nickname': user.user_nickname, 'user_email': user.user_email})
  return jsonify(data=datas)
# 添加用户数据,一条一条添加
@app.route('/user', methods=['POST'])
def addUser():
  user_name = request.form.get('user_name')
  user_password = request.form.get('user_password')
  user_nickname = request.form.get('user_nickname')
  user_email = request.form.get('user_email')
  user = User(user_name=user_name, user_password=user_password, user_nickname=user_nickname, user_email=user_email)
  try:
    mydb.session.add(user)
    mydb.session.commit()
  except:
    mydb.session.rollback()
    mydb.session.flush()
  userId = user.user_id
  if (user.user_id is None):
    result = {'msg': '添加失败'}
    return jsonify(data=result)
  data = User.query.filter_by(user_id=userId).first()
  result = {'user_id': user.user_id, 'user_name': user.user_name, 'user_nickname': user.user_nickname, 'user_email': user.user_email}
  return jsonify(data=result)
# 获取单条数据
@app.route('/user/<int:userId>', methods=['GET'])
def getUser(userId):
  user = User.query.filter_by(user_id=userId).first()
  if (user is None):
    result = {'msg': '找不到数据'}
  else:
    result = {'user_id': user.user_id, 'user_name': user.user_name, 'user_nickname': user.user_nickname, 'user_email': user.user_email}
  return jsonify(data=result)
# 修改用户数据
@app.route('/user/<int:userId>', methods=['PATCH'])
def updateUser(userId):
  user_name = request.form.get('user_name')
  user_password = request.form.get('user_password')
  user_nickname = request.form.get('user_nickname')
  user_email = request.form.get('user_email')
  try:
    user = User.query.filter_by(user_id=userId).first()
    if (user is None):
      result = {'msg': '找不到要修改的记录'}
      return jsonify(data=result)
    else:
      user.user_name = user_name
      user.user_password = user_password
      user.user_nickname = user_nickname
      user.user_email = user_email
      mydb.session.commit()
  except:
    mydb.session.rollback() # 回滚
    mydb.session.flush() # 重置
  userId = user.user_id
  data = User.query.filter_by(user_id=userId).first()
  result = {'user_id': user.user_id, 'user_name': user.user_name, 'user_password': user.user_password, 'user_nickname': user.user_nickname, 'user_email': user.user_email}
  return jsonify(data=result)
# 删除用户数据
@app.route('/user/<int:userId>', methods=['DELETE'])
def deleteUser(userId):
  User.query.filter_by(user_id=userId).delete()
  mydb.session.commit()
  return getUsers()
if __name__ == '__main__':
  app.run()

三、返回数据的样式

{
  "data": {
    "user_email": "@126.com",
    "user_id": 6,
    "user_name": "xiaoli",
    "user_nickname": "lili"
  }
}

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
Python使用plotly绘制数据图表的方法
Jul 18 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
简单了解Python中的几种函数
Nov 03 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
Django 通过JS实现ajax过程详解
Jul 30 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
python中 _、__、__xx__()区别及使用场景
Jun 30 Python
python中pivot()函数基础知识点
Jan 03 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 #Python
使用Python操作ArangoDB的方法步骤
Feb 02 #Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 #Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 #Python
Python递归及尾递归优化操作实例分析
Feb 01 #Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 #Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 #Python
You might like
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
php读取xml实例代码
2010/01/28 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
js实现随机数小游戏
2019/06/28 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python在非root权限下的安装方法
2018/01/23 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
python 解决微分方程的操作(数值解法)
2021/05/26 Python
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android