python3 flask 使用Mysql数据库

  1. 创建flask基本项目结构

    from flask import Flask
    app = Flask(__name__)
  2. 安装flask-sqlalchemy

    pip install flask-sqlalchemy
  3. 导入配置

    from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost/hhh'
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    db = SQLAlchemy(app)

    python3 不再支持MySQKdb,连接mysql数据库需要使用pymysql

    安装pymysql

    pip install pymysql

  4. 定义表模型

    class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(64), unique=True, nullable=True)def __init__(self, username):self.username = usernamedef __repr__(self):return '<User {}>'.format(self.username)
  5. 创建表
    在python shell中

    >>> from app import db
    >>> db.create_all()
  6. 添加数据
    在python shell中

    >>> from app import db
    >>> from app import User
    >>> user=User('hou')
    >>> db.session.add(user)
    >>> db.session.commit()
  7. 查询数据库

    >>> User.query.all()
    [<User hou>]
    >>> User.query.filter_by(username='hou').first()
    <User hou>
  8. 一对多或一对一表关联

    • 定义Post 表模型

      from datetime import datetime
      class Post(db.Model):id = db.Column(db.Integer, primary_key=True)body = db.Column(db.Text)timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)# 添加外键声明user_id = db.Column(db.Integer, db.ForeignKey('user.id'))def __repr__(self):return '<Post {}>'.format(self.body)
    • User添加关系

      class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(64), unique=True, nullable=True)# 新加的# 如果您想要一对一关系,您可以把 uselist=False 传给 relationship() 。posts = db.relationship('Post', backref='user', lazy='dynamic')def __init__(self, username):self.username = usernamedef __repr__(self):return '<User {}>'.format(self.username)
    • 执行创建表

    • 添加数据

      >>> from app import *
      >>> user=User.query.filter_by(username='hou').first()
      >>> post1=Post(body='post1post1post1post1post1post1',user=user)
      >>> db.session.add(post1)
      >>> db.session.commit()
    • 查询数据

      >>> user=User.query.filter_by(username='hou').first()
      >>> user.posts.all()
      [<Post 哈哈哈哈哈>, <Post post1post1post1post1post1post1>]
      >>> user.posts.filter_by(id=4).first()
      <Post post1post1post1post1post1post1>
  9. 多对多表关联

    • 定义Category 表模型

      class Category(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50))def __init__(self, name):self.name = namedef __repr__(self):return '<Category %r>' % self.name
    • 定义关联表

      categorys = db.Table('categorys',db.Column('id', db.Integer, primary_key=True),db.Column('post_id', db.Integer, db.ForeignKey('post.id')),db.Column('category_id', db.Integer, db.ForeignKey('category.id')))
    • Post 中添加关系

      categorys = db.relationship('Category', secondary=categorys, backref=db.backref('posts', lazy='dynamic'))
    • 执行创建表

    • 准备类别数据

      >>> from app import *
      >>> category1=Category(name="前端")
      >>> category2=Category(name="nodejs")
      >>> category3=Category(name="python")
      >>> db.session.add(category1)
      >>> db.session.add(category2)
      >>> db.session.add(category3)
      >>> db.session.commit()
    • 添加post

      >>> from app import *
      >>> category1=Category.query.get(1)
      >>> category2=Category.query.get(2)
      >>> category3=Category.query.get(3)
      >>> user=User.query.get(1)
      >>> post1=Post(body='关联的post',user=user,categorys=[category1])
      >>> post2=Post(body='关联的post',user=user,categorys=[category1,category2,category3])
      >>> db.session.add(post1)
      >>> db.session.add(post2)
      >>> db.session.commit()
  10. 修改代码结构使其更好的提供接口

  11. 提供简单rest接口user

    from flask import jsonify, request
    from app.api import bpfrom app.models import User
    from app import db
    from app.error import bad_request@bp.route('/users', methods=['GET'])
    def get_users():limit = min(request.args.get('limit', 10, int), 100)offset = (request.args.get('page', 1, int) - 1) * request.args.get('limit', 10, int)return jsonify([user.to_dict() for user in User.query.limit(limit).offset(offset).all()])@bp.route('/users/<int:id>', methods=['GET'])
    def get_user(id):return jsonify(User.query.get_or_404(id).to_dict())@bp.route('/users', methods=['POST'])
    def add_user():data = request.get_json() or {}if 'username' not in data:return bad_request('错误的参数')user = User(username=data['username'])db.session.add(user)db.session.commit()return jsonify(user.to_dict())@bp.route('/users/<int:id>', methods=['PUT'])
    def update_user(id):user = User.query.get_or_404(id)data = request.get_json() or {}if 'username' not in data:return bad_request('错误的参数')setattr(user, 'username', data['username'])db.session.commit()return jsonify(user.to_dict())@bp.route('/users/<int:id>', methods=['DELETE'])
    def delete_user(id):user = User.query.get_or_404(id)db.session.delete(user)db.session.commit()return jsonify({'message': 'ok'})
    
  12. 源代码地址 https://github.com/houxiaozhao/python3-flask-mysql

python3 flask 使用Mysql数据库相关推荐

  1. eclipse连接mysql_专题一、flask构建mysql数据库正确姿势

    每周壹总结,一起共同充电第121篇 应用程序最核心的就是数据,每天我们写程序其实也是在处理数据的过程,那么很有必要系统性的讲讲和梳理python的flask框架是如何进行数据交互操作的. 趁这3天假期 ...

  2. Python3.x连接MySQL数据库,SQL语句使用方法

    Python3.x连接MySQL数据库 使用的Python包 连接MySQL数据库使用的包为pymysql 使用pip导入此包,在cmd下输入一下语句: pip install pymysql 打开数 ...

  3. Neo4j从mysql读取数据_[bigdata-086] python3+neo4j 从mysql数据库读取记录然后创建节点和关系写入到neo4j...

    1. 测试 1.1web界面  http://tz211:7474/browser/ 在这里执行 MATCH (n) RETURN n,能看到节点和相互关系 一共是3个节点,6个相互关系 1.2 在2 ...

  4. flask对mysql数据库增删改查_flask后台框架1.4(mysql配置+数据库增删改查)-Go语言中文社区...

    mysql配置及问题 前面三份博客的笔记基本记录了所用到的基本操作,这里开始记录后台和数据库的交互,数据库我们用的是mysql然后的话mysql就不记录了因为很简单,要是没有安装学习的话,基本在网上找 ...

  5. Python3 pymysql连接mysql数据库 windows

    pymsql是一个不错的连接mysql的Python类库 我比较喜欢把知识点注释在我的code里,直接上代码吧,不需要要多解释说明. import pymysql# unix_socket='/tmp ...

  6. 菜鸟教程python3 mysql_Python 操作 MySQL 数据库

    Python 操作 MySQL 数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的 ...

  7. flask连接mysql数据库_Flask与Mysql数据库建立连接

    该开始学习Flask,接触到数据库方面,记录一点儿笔记,希望有用. 环境:python3.7.7,flask1.1.2 与数据库建立联系,需要在自己的虚拟环境中pip install :flask-s ...

  8. python web框架flask连接mysql数据库操作

    最近在用flask框架做一个python web项目,其中要连接数据库,所以总结如下: 如何用pycharm快速创建一个flask项目我就不详细说了,可以先创建虚拟环境,不过大部分的事pycharm都 ...

  9. flask导入mysql数据库_flask 数据库报错

    解决flask服务器使用gunicorn启动时,获取全局变量失败的问题 用于我使用gunicorn开启多个flask进程,因此为了解决进程间通信问题,需要添加一个共享内存--redis 参考链接: h ...

  10. python的flask框架mysql数据库迁移

    最近在学习<flaskweb开发>,教程里采用 sqlite 数据库,我自己用的是mysql,在到数据库迁移部分有点懵了,想跳过去,但是到后面发现很不方便,于是折腾了好长时间,网上也找不到 ...

最新文章

  1. 基于web的可定制数据填报平台
  2. 12个深度学习面试问题
  3. python字典排序取最值总结
  4. kafka基本操作:创建topic、生产/消费消息(同一消费组均分消息;不同消费组订阅消息)
  5. ORA-01720: grant option does not exist for 'xxx.xxxx'
  6. NioEventLoopGroup的构造函数
  7. 微信小程序最新开发资源汇总,对学习微信小程序的新手有一定帮助
  8. 简述驱动桥的动力传递路线_卡车驱动桥中的差速锁究竟有多大的作用?它是如何起作用的?...
  9. 堆排序原理及其实现(C++)
  10. 【struts2】预定义拦截器
  11. DaDa英语完成卖身好未来?英语在线1v1再洗牌
  12. system.exception所有子类详解
  13. python colormap_Python科学计算技巧积累八——colormap 和 contour map的绘制
  14. 由于受到新冠疫情的影响,GDP同比增长率从2019年的6.1%下滑到了2.3%
  15. 减持奈飞增持京东健康,“贝莱德们”为何开始偏爱中国企业?
  16. 3D建模京东商品3D展示怎么做?
  17. 手机USB共享电脑宽带的尝试过程,从失败到成功
  18. 【路科V0】systemVerilog基础11——随机变量
  19. 使用python来保存win10的聚焦图片
  20. 解决报错:soundfile.LibsndfileError: Error opening ‘.wav‘: File contains data in an unknown format.

热门文章

  1. 微信浮窗是不是服务器保存,微信浮窗,真能解决小程序留存难题吗?
  2. 流水灯程序总结:关于Crol和cror的用法
  3. python论文用到的外文参考文献_论文外文文献怎么找?
  4. 修改IE浏览器点击右键“查看源文件”时的打开程序
  5. 路飞学城python开发ftp_路飞学城-Python开发集训-第1章
  6. 跟着海盗头子创业是一种怎样的体验?
  7. 华为手机热点无法连接_为什么电脑就是连不上华为手机的热点
  8. SAP 库存报表查询
  9. OCiOS开发:汉字转拼音
  10. 手机ncm转mp3工具_一款手机、电脑都能用的文字转语音工具,够高能! - 橘子世界...