Python——Flask框架——数据库
一、数据库框架 Flask-SQLAlchemy
(1)安装: pip install flask-sqlalchemy
(2)Flask-SQLAlchemy数据库URL
| 数据库引擎 | URL |
| MySQL | mysql://username:password@hostname/database |
| Postgres | postgresql://username:password@hostname/database |
| SQLite(Unix) | sqlite:////abslute/path/to/database |
| SQLite(Windows) | sqlite:///c:/absolute/path/tp/database |
二、配置数据库
from flask.ext.sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__)
app = Flask(__name__)
app.config['SQLACHEMY_DATABASE_URI'] = \'sqlite:///' + os.path.join(basedir,'data.sqlite')
app.config['SQLACHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)
三、定义模型
**roles表和user表定义模型Role和User
class Role(db.Model):
#数据库中使用的表名
__tablenaame__ = 'roles'
id = db.Column(db.Integer, primary_key =True)
name = db.column(db.String(64),unique = True)
def __repr__(self):
return <Role %r>' % self.name class User(db.Model):
__tablenaame__ = 'users'
id = db.Column(db.Integer, primary_key =True)
username = db.column(db.String(64),unique = True,index = True)
def __repr__(self):
return <User %r>' % self.username
(2)最常使用的SQLAlchemy列选项
| 选项名 | 说明 |
| primary_key | 主键,经常是ID |
| unique | 不允许出现重复的值 |
| index | 创建索引,提升查询效率 |
| nullable | 允许空值 |
| default | 定义默认值 |
四、关系
(1)一对多关系
class Role(db.Model):
#数据库中使用的表名
'''
__tablenaame__ = 'roles'
id = db.Column(db.Integer, primary_key =True)
name = db.column(db.String(64),unique = True)
'''
users = db.relationship('User',backref = 'role')
'''
def __repr__(self):
return <Role %r>' % self.name
'''
class User(db.Model):
'''
__tablenaame__ = '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('role.id'))
'''
def __repr__(self):
return <User %r>' % self.username
'''
(2)常用的关系项
| 选项 | 说明 |
| backref | 在关系的另一个模型中添加反向引用 |
| primaryjoin | 明确两个模型中间的连接条件 |
| lazy | 指定加载相关记录 |
| uselist | 设置Fales,不使用列表 |
| order_by | 指定关系中记录的排序方式 |
| secondary | 指定多对多关系表的名字 |
| secondaryjoin | 无法自行决定时,指定多堆垛关系的耳机连接条件 |
**lazy可选值select(首次访问时需要加载),immediate(源对象加载后就加载),joined(加载记录,单使用连接),subquery(立即加载,单使用子查询),noload(永不加载)和dynamic(不加载记录,单提供加载记录查询)
**db.relationship(),把uselist设置为False,把“多”变成“一”
五、数据库操作
(1)创建表
from hello import db
db.create_all()
**创建一个名字为data.sqlite
(2)插入行
db.session.all_all([admin_role,mod_role,user_role,user_john,user_susan,user_david])
#提交数据
db.session.commit()
**数据回滚 db.session.rollback()
(3)修改行
#把"Admin" 角色重命名为"Administrator"
admin_role.name = 'Administrator'
db.session.add(admin_role)
db.session.commit()
(4)删除行
db.session.delete(mod_role)
db.session.commit()
(5)查询行
5.2常用的查询过滤器
| 过滤器 | 说明 |
| filter | 把过滤器添加到原查询上,返回一个新查询 |
| filter_by | 把等值过滤器添加到原查询上,返回一个新查询 |
| limit | 使用指定的值限制原查询返回的结果数量,返回一个查询 |
| offset | 偏移原查询返回的结果,返回一个新查询 |
| order_by | 根据指定条件对原查询结果进行排序,返回一个新查询 |
| group_by | 根据指定条件对原查询结果进行分组,返回一个新查询 |
5.3常用查询执行函数
| 方法 | 说明 |
| all | 以列表形式返回查询的所有结果 |
| first | 返回查询的第一个结果,没有结果返回None |
| first_or_404 | 返回查询的第一个结果,没有结果,返回404错误 |
| get | 返回指定主键对应的行,没有结果返回None |
| get_or_404 | 返回指定主键对应的行,没有结果,返回404错误 |
| count | 返回查询的结果的数量 |
| paginate | 返回Paginate对象,它包含指定范围内容的结果 |
六、在视图函数中操作数据库
七、集成Python shell ?
为shell命令添加一个上下文
def make_shell_context():
return dict(app=app,db=db,User=User,Role=Role)
manager.add_command("shell",Shell(make_context=make_shell_context)
**make_shell_context函数注册了程序,数据库实例以及模型,因此这些对象能直接导入shell
八、数据库迁移(Flask-Migrate)
(1)安装 : pip install flask-migrate
(2)配置Flask-Migrate
form flask.ext.migrate import Migrate,MigrateCommand
#...
migrate = Migrate(app,db)
manager.add_command('db',MigrateCommand)
(2)迁移脚本
upgrade()函数把迁移中的改动应用到数据库中
downgrade()函数责将改动删除
自动迁移脚本: python hello.py db migrate -m "initial migration"
九、更新数据库
python hello.py db upgrade
Python——Flask框架——数据库的更多相关文章
- python flask框架 数据库的使用
#coding:utf8 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)
#3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...
- Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架
今天学习了python flask框架的安装过程以及使用案例,感觉网上讲的东西都没有从我们这种初学者的角度去考虑(哈哈),最后还是奉上心得: 1.安装virtualenv $ sudo apt-get ...
- python flask框架学习——开启debug模式
学习自:知了课堂Python Flask框架——全栈开发 1.flask的几种debug模式的方法 # 1.app.run 传参debug=true app.run(debug=True) #2 设置 ...
- python flask框架学习(二)——第一个flask程序
第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...
- python flask框架学习(一)——准备工作和环境配置与安装
Flask装备: 学习自:知了课堂Python Flask框架——全栈开发 1.Python版本:3.6 2.Pycharm软件: 3.安装虚拟环境: (1)安装virtualenv: pip ins ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)
#3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...
- Python Flask框架路由简单实现
Python Flask框架路由的简单实现 也许你听说过Flask框架.也许你也使用过,也使用的非常好.但是当你在浏览器上输入一串路由地址,跳转至你所写的页面,在Flask中是怎样实现的,你是否感到好 ...
- python Flask框架mysql数据库配置
我是一个没有笔记习惯的低级程序员,但是我还是喜欢编程,从小学就开始跟着玩电脑,对抓鸡,ddos,跳板刷钻开始了自己的IT 旅程,之后学习了各种语言,但是可惜都不没有达到精通,都是略懂一二,现在想把Py ...
随机推荐
- Flask-SQLAlchemy常用操作
一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数 ...
- Java中Enumeration接口的用法
Enumeration是java.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法,与Iterator差不多,用来遍历集合中的元素 但是枚举Enumeration只提供 ...
- 【Windows】+ windows下在某一文件夹下按“shift+鼠标右键”打开CMD窗口
前言:没更改之前是打开的powershell窗口,超不习惯 新建一个txt文件,然后复制以下代码,然后保存为OpenCmdHere.reg 格式,然后双击即可 Windows Registry Edi ...
- Libinput 1.13 RC2发布
Red Hat的Peter Hutterer周四宣布发布libinput 1.13 RC2,作为X.Org和Wayland Linux系统使用此输入处理库的最新测试版本. Libinput 1.13将 ...
- Python脱产8期 Day10 2019/4/24
一 函数 1.定义:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数>>工具. 2.函数的优点:1.避免代码的冗余:2.让程序结构代码更加清晰:3.让代码更加具 ...
- linux内存源码分析 - 内存回收(lru链表)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 对于整个内存回收来说,lru链表是关键中的关键,实际上整个内存回收,做的事情就是处理lru链表的收缩,所以 ...
- Vue-computed的set和get
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 面试 12:玩转 Java 快速排序
终于轮到我们排序算法中的王牌登场了. 快速排序由于排序效率在同为 O(nlogn) 的几种排序方法中效率最高,因此经常被采用.再加上快速排序思想——分治法也确实非常实用,所以 在各大厂的面试习题中,快 ...
- SQLite 实现删除表中前一天的数据
注意点1 要注意SQLite datatime()函数为何获取不到系统本地时间?这个问题,坑死我了. 解决方法详见这篇文章:SQLite datatime()函数为何获取不到系统本地时间? 注意点2: ...
- Java面试总结之AIO与NIO
1.Java NIO 是一种同步非阻塞的I/O模型 将多个IO的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下处理多个客户端请求. NIO三个核心对象:通道(Channel).缓冲 ...