python3 flask 使用Mysql数据库
python3 flask 使用Mysql数据库
创建flask基本项目结构
from flask import Flask app = Flask(__name__)
安装
flask-sqlalchemy
pip install flask-sqlalchemy
导入配置
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
定义表模型
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)
创建表
在python shell中>>> from app import db >>> db.create_all()
添加数据
在python shell中>>> from app import db >>> from app import User >>> user=User('hou') >>> db.session.add(user) >>> db.session.commit()
查询数据库
>>> User.query.all() [<User hou>] >>> User.query.filter_by(username='hou').first() <User hou>
一对多或一对一表关联
定义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>
多对多表关联
定义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()
修改代码结构使其更好的提供接口
提供简单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'})
源代码地址 https://github.com/houxiaozhao/python3-flask-mysql
python3 flask 使用Mysql数据库相关推荐
- eclipse连接mysql_专题一、flask构建mysql数据库正确姿势
每周壹总结,一起共同充电第121篇 应用程序最核心的就是数据,每天我们写程序其实也是在处理数据的过程,那么很有必要系统性的讲讲和梳理python的flask框架是如何进行数据交互操作的. 趁这3天假期 ...
- Python3.x连接MySQL数据库,SQL语句使用方法
Python3.x连接MySQL数据库 使用的Python包 连接MySQL数据库使用的包为pymysql 使用pip导入此包,在cmd下输入一下语句: pip install pymysql 打开数 ...
- Neo4j从mysql读取数据_[bigdata-086] python3+neo4j 从mysql数据库读取记录然后创建节点和关系写入到neo4j...
1. 测试 1.1web界面 http://tz211:7474/browser/ 在这里执行 MATCH (n) RETURN n,能看到节点和相互关系 一共是3个节点,6个相互关系 1.2 在2 ...
- flask对mysql数据库增删改查_flask后台框架1.4(mysql配置+数据库增删改查)-Go语言中文社区...
mysql配置及问题 前面三份博客的笔记基本记录了所用到的基本操作,这里开始记录后台和数据库的交互,数据库我们用的是mysql然后的话mysql就不记录了因为很简单,要是没有安装学习的话,基本在网上找 ...
- Python3 pymysql连接mysql数据库 windows
pymsql是一个不错的连接mysql的Python类库 我比较喜欢把知识点注释在我的code里,直接上代码吧,不需要要多解释说明. import pymysql# unix_socket='/tmp ...
- 菜鸟教程python3 mysql_Python 操作 MySQL 数据库
Python 操作 MySQL 数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的 ...
- flask连接mysql数据库_Flask与Mysql数据库建立连接
该开始学习Flask,接触到数据库方面,记录一点儿笔记,希望有用. 环境:python3.7.7,flask1.1.2 与数据库建立联系,需要在自己的虚拟环境中pip install :flask-s ...
- python web框架flask连接mysql数据库操作
最近在用flask框架做一个python web项目,其中要连接数据库,所以总结如下: 如何用pycharm快速创建一个flask项目我就不详细说了,可以先创建虚拟环境,不过大部分的事pycharm都 ...
- flask导入mysql数据库_flask 数据库报错
解决flask服务器使用gunicorn启动时,获取全局变量失败的问题 用于我使用gunicorn开启多个flask进程,因此为了解决进程间通信问题,需要添加一个共享内存--redis 参考链接: h ...
- python的flask框架mysql数据库迁移
最近在学习<flaskweb开发>,教程里采用 sqlite 数据库,我自己用的是mysql,在到数据库迁移部分有点懵了,想跳过去,但是到后面发现很不方便,于是折腾了好长时间,网上也找不到 ...
最新文章
- 基于web的可定制数据填报平台
- 12个深度学习面试问题
- python字典排序取最值总结
- kafka基本操作:创建topic、生产/消费消息(同一消费组均分消息;不同消费组订阅消息)
- ORA-01720: grant option does not exist for 'xxx.xxxx'
- NioEventLoopGroup的构造函数
- 微信小程序最新开发资源汇总,对学习微信小程序的新手有一定帮助
- 简述驱动桥的动力传递路线_卡车驱动桥中的差速锁究竟有多大的作用?它是如何起作用的?...
- 堆排序原理及其实现(C++)
- 【struts2】预定义拦截器
- DaDa英语完成卖身好未来?英语在线1v1再洗牌
- system.exception所有子类详解
- python colormap_Python科学计算技巧积累八——colormap 和 contour map的绘制
- 由于受到新冠疫情的影响,GDP同比增长率从2019年的6.1%下滑到了2.3%
- 减持奈飞增持京东健康,“贝莱德们”为何开始偏爱中国企业?
- 3D建模京东商品3D展示怎么做?
- 手机USB共享电脑宽带的尝试过程,从失败到成功
- 【路科V0】systemVerilog基础11——随机变量
- 使用python来保存win10的聚焦图片
- 解决报错:soundfile.LibsndfileError: Error opening ‘.wav‘: File contains data in an unknown format.
热门文章
- 微信浮窗是不是服务器保存,微信浮窗,真能解决小程序留存难题吗?
- 流水灯程序总结:关于Crol和cror的用法
- python论文用到的外文参考文献_论文外文文献怎么找?
- 修改IE浏览器点击右键“查看源文件”时的打开程序
- 路飞学城python开发ftp_路飞学城-Python开发集训-第1章
- 跟着海盗头子创业是一种怎样的体验?
- 华为手机热点无法连接_为什么电脑就是连不上华为手机的热点
- SAP 库存报表查询
- OCiOS开发:汉字转拼音
- 手机ncm转mp3工具_一款手机、电脑都能用的文字转语音工具,够高能! - 橘子世界...