flask + pymysql操作Mysql数据库的实例


Posted in Python onNovember 13, 2017

安装flask-sqlalchemy、pymysql模块

pip install flask-sqlalchemy pymysql

### Flask-SQLAlchemy的介绍

1. ORM:Object Relationship Mapping(模型关系映射)。

2. flask-sqlalchemy是一套ORM框架。

3. ORM的好处:可以让我们操作数据库跟操作对象是一样的,非常方便。因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象。

4. 安装`flask-sqlalchemy`:`sudo pip install flask-sqlalchemy`。

安装Mysql数据库

from flask.ext.sqlalchemy import SQLAlchemy 
from flask import Flask 
 
'''配置数据库'''
app = Flask(__name__) 
app.config['SECRET_KEY'] ='hard to guess'
# 这里登陆的是root用户,要填上自己的密码,MySQL的默认端口是3306,填上之前创建的数据库名jianshu,连接方式参考 \ 
# http://docs.sqlalchemy.org/en/latest/dialects/mysql.html 
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://jianshu:jianshu@127.0.0.1:3306/jianshu'
#设置这一项是每次请求结束后都会自动提交数据库中的变动 
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
#实例化 
db = SQLAlchemy(app)

模型定义

'''定义模型,建立关系'''
class Role(db.Model): 
 # 定义表名 
 __tablename__ = 'roles'
 # 定义列对象 
 id = db.Column(db.Integer, primary_key=True) 
 name = db.Column(db.String(64), unique=True) 
 user = db.relationship('User', backref='role') 
 
 #repr()方法显示一个可读字符串,虽然不是完全必要,不过用于调试和测试还是很不错的。 
 def __repr__(self): 
  return '<Role {}> '.format(self.name) 
 
class User(db.Model): 
 __tablename__ = 'users'
 id = db.Column(db.Integer, primary_key=True) 
 username = db.Column(db.String(64), unique=True, index=True) 
 role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) 
 
 def __repr__(self): 
  return '<User {}>'.format(self.username)

flask + pymysql操作Mysql数据库的实例

flask + pymysql操作Mysql数据库的实例

关系

关系数据库通过使用关系在不同的表中建立连接。关系图表达了用户和用户角色之间的简单关系。这个角色和用户是一对多关系,因为一个角色可以从属于多个用户,而一个用户只能拥有一个角色。
下面的模型类展示了中表达的一对多关系。

class Role(db.Model): 
 # ... 
 users = db.relationship('User', backref='role') 
 
class User(db.Model): 
 # ... 
 role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

flask + pymysql操作Mysql数据库的实例

flask + pymysql操作Mysql数据库的实例

#!/usr/bin/env python 
 
from exts import db 
from datetime import datetime 
 
 
class User(db.Model): 
 __tablename__ = 'user'
 id = db.Column(db.Integer,primary_key=True,autoincrement=True) 
 username = db.Column(db.String(50),nullable=False) 
 telephone = db.Column(db.String(11),nullable=False) 
 password = db.Column(db.String(100), nullable=False) 
 
class Questions(db.Model): 
 __tablename__ = 'questions'
 id = db.Column(db.Integer,primary_key=True,autoincrement=True) 
 title = db.Column(db.String(100),nullable=False) 
 content = db.Column(db.Text,nullable=False) 
 create_time = db.Column(db.DateTime,default=datetime.now) 
 author_id = db.Column(db.Integer,db.ForeignKey('user.id')) 
 
 author = db.relationship('User',backref=db.backref('questions')) 
 
class Answer(db.Model): 
 __tablename__ = 'answer'
 id = db.Column(db.Integer,primary_key=True,autoincrement=True) 
 content = db.Column(db.Text,nullable=False) 
 question_id = db.Column(db.Integer,db.ForeignKey('questions.id')) 
 author_id = db.Column(db.Integer,db.ForeignKey('user.id')) 
 
 question = db.relationship('Questions',backref = db.backref('answers')) 
 author = db.relationship('User',backref = db.backref('answers'))

Flask-SQLAlchemy数据的增、删、改、查:

1. 增:

# 增加:
article1 = Article(title='aaa',content='bbb')
db.session.add(article1)
# 事务
db.session.commit()

2. 查:

# 查
# select * from article where article.title='aaa';
article1 = Article.query.filter(Article.title == 'aaa').first()
print 'title:%s' % article1.title
print 'content:%s' % article1.content

3. 改:

# 改:
# 1. 先把你要更改的数据查找出来
article1 = Article.query.filter(Article.title == 'aaa').first()
# 2. 把这条数据,你需要修改的地方进行修改
article1.title = 'new title'
# 3. 做事务的提交
db.session.commit()

4. 删:

```
# 删
# 1. 把需要删除的数据查找出来
article1 = Article.query.filter(Article.content == 'bbb').first()
# 2. 把这条数据删除掉
db.session.delete(article1)
# 3. 做事务提交
db.session.commit()
```

以上这篇flask + pymysql操作Mysql数据库的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的金山快盘的签到程序
Jan 17 Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
python中星号变量的几种特殊用法
Sep 07 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
解决python Jupyter不能导入外部包问题
Apr 15 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
python 制作简单的音乐播放器
Nov 25 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
如何利用python实现列表嵌套字典取值
Jun 10 Python
django之session与分页(实例讲解)
Nov 13 #Python
python实现图片处理和特征提取详解
Nov 13 #Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 #Python
python图像常规操作
Nov 11 #Python
python中实现k-means聚类算法详解
Nov 11 #Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 #Python
Python内存管理方式和垃圾回收算法解析
Nov 11 #Python
You might like
PHP 递归效率分析
2009/11/24 PHP
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
PHP查询快递信息的方法
2015/03/07 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
利用Python爬取可用的代理IP
2016/08/18 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
企业形象策划方案
2014/05/29 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
通知格式
2015/04/27 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书