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删除列表内容
Aug 04 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
解决Django连接db遇到的问题
Aug 29 Python
pip install python 快速安装模块的教程图解
Oct 08 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Python图片的横坐标汉字实例
Dec 04 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
python操作gitlab API过程解析
Dec 27 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
python安装mysql的依赖包mysql-python操作
Jan 01 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环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
php获取excel文件数据
2017/04/21 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
javaScript中定义类或对象的五种方式总结
2016/12/04 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python递归遍历列表及输出的实现方法
2015/05/19 Python
python素数筛选法浅析
2018/03/19 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
解除合同协议书
2014/04/17 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
国际贸易系求职信
2014/08/09 职场文书
教师工作能力自我评价
2015/03/04 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
vue完美实现el-table列宽自适应
2021/05/08 Vue.js
python函数的两种嵌套方法使用
2022/04/02 Python