《Flask development》flask数据库笔记
来源:互联网 发布:用sql语句创建表步骤 编辑:程序博客网 时间:2024/05/16 09:26
数据库是web开发中必然要接触到的,也是web程序中比较重要的组成。
书中使用的数据库是关系型数据库,即SQL 数据库,使用结构化查询语言。这里使用的是轻量级别的SQLite包。
选用数据库框架考虑的因素:
- 易用性
- 性能
- 可移植性
- Flask集成度
这里使用的是Flask-SQLAlchemy管理数据库,提供了高层的ORM,也提供了使用数据库原生 SQL 的低层功能。
抽象层,也称为对象关系映射(Object-Relational Mapper,ORM)或对象文档映射(Object-Document Mapper,ODM),在用户不知觉的情况下把高层的面向对象操作转换成低层的数据库指令。
定义模型:
在 ORM 中,模型一般是一个 Python 类,继承db.Model, 类中的属性对应数据库表中的列。
关系:
- 一对多(简单):一对多, 一对一,多对一
- 多对多(复杂):借助第三张表
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy#配置数据库app = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db/users.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Truedb = SQLAlchemy(app) #db对象是 SQLAlchemy 类的实例class Role(db.Model): # ... users = db.relationship('User', backref='role')class User(db.Model): # ... role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
添加到 Role 模型中的 users 属性代表这个关系的面向对象视角。对于一个 Role 类的实例,其 users 属性将返回与角色相关联的用户组成的列表。 db.relationship() 的第一个参数表明这个关系的另一端是哪个模型。如果模型类尚未定义,可使用字符串形式指定。
db.relationship() 中的 backref 参数向 User 模型中添加一个 role 属性,从而定义反向关系。这一属性可替代 role_id 访问 Role 模型,此时获取的是模型对象,而不是外键的值。
您想要使用不止一个应用或者在一个函数中动态地创建应用的话。如果您在一个函数中定义您的应用,但是 SQLAlchemy 对象是全局的,后者如何知道前者了?答案就是 init_app() 函数。
数据库操作:
>>> db.create_all() #创建表>>> db.drop_all() #删除表>>> admin_role = Role(name='Admin') #插入或修改行,直接赋值>>> db.session.add(admin_role) #准备把对象写入数据库之前,先要将其添加到会话中>>> db.session.delete(mod_role) #删除行>>> db.session.commit() #把对象写入数据库,提交>>> Role.query.all() #查询行>>> User.query.filter_by(role=user_role).all() #过滤查询!
使用Flask-Migrate实现数据库迁移:
- 安装:
pip install flask-migrate
- 配置:
from flask.ext.migrate import Migrate, MigrateCommand# ...migrate = Migrate(app, db)manager.add_command('db', MigrateCommand)
- 使用:
(venv) $ python hello.py db init #创建迁移创库(venv) $ python hello.py db migrate -m "initial migration" #创建迁移脚本(venv) $ python hello.py db upgrade #更新数据库
数据库迁移可能会遇到各种小问题,失败报错之类,因为不是在生产环境,所以可以简单粗暴删除xx.sqlite文件和迁移仓库里的迁移脚本,再重新创建迁移脚本,更新数据库即可
- 《Flask development》flask数据库笔记
- flask笔记:5:数据库
- flask学习笔记(-数据库)
- 《Flask development》flask-script插件
- 《Flask Web Development》学习笔记---chapter3 templates
- 《Flask Web Development》学习笔记---chapter5 Database
- Flask学习笔记之数据库
- Flask 数据库
- flask-数据库
- flask笔记
- Flask笔记
- flask 笔记
- Flask笔记
- Flask Web Development —— 数据库(中)
- 《Flask Web Development》学习笔记---chapter4 Web Forms
- flask
- flask
- Flask
- Android基础知识11
- 坚持#第155天~不是普通的人~是优秀的人
- 算法设计与应用基础: 第五周(2)
- Accept CS Ph.D. Offer from Stony Brook University,去SUNY石溪大学的CS Ph.D.啦
- [code static]php基础语法
- 《Flask development》flask数据库笔记
- SinglePage
- 图说MySQL
- linux_用户及组管理介绍
- c++函数重载和默认参数
- PAT-天梯赛练习集-L2-020-功夫传人
- 三次握手 四次握手 与socket函数的关系
- 即使不跳槽,你也应该做的三件事情
- pwnable.kr [Toddler's Bottle]