python-Web-flask-数据库
3 数据库:
Flask-SQLAlchemy 安装及连接
pip install flask-sqlalchemy
pip install flask-mysqldb
# 数据库链接地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'# 动态追踪修改设置,如未设置只会提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
字段类型:Integer,Float,String,Text,Boolean,Date,Time
选项:primary_key,unique,index,nullable
关系选项:backref,primary join,order_by,secondary,secondary join
使用数据库增删该查
#创建SQLAlchemy对象,读取app中配置信息
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)
#设置关系属性,方便查询使用
us = db.relationship('User', backref='role')
#重写__repr__方法,方便查看对象输出内容
def __repr__(self):
return 'Role:%s'% self.name
if __name__ == '__main__':
#删除所有和db相关联的表
db.drop_all()
#创建所有和db相关联的表
db.create_all()
app.run(debug=True)
# 一对多
class Role(db.Model):
#关键代码反向查寻
us = db.relationship('User', backref='role', lazy='dynamic')
...
class User(db.Model):
# 外键
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
db.session.add(obj) 添加对象
db.session.delete(obj) 删除对象
db.session.commit() 提交会话
db.session.rollback() 回滚
db.session.remove() 移除会话
filter(),Limit,order_by(),group_by()
all(),first(),count(),
User.query.filter_by(name='wang').all()
User.query.first()
User.query.all()
User.query.filter(User.name.endswith('g')).all() # 模糊
User.query.get(1) # 主键id=1
User.query.filter(User.name!='wang').all() # 不等与wang的
from sqlalchemy import not_
User.query.filter(not_(User.name=='chen')).all() # 取反
from sqlalchemy import and_, or_
User.query.filter(and_(User.name!='wang',User.email.endswith('163.com'))).all()#与
# 查询后删除 user = User.query.first() db.session.delete(user) db.session.commit() User.query.all() # 更新 user = User.query.first() user.name = 'dong' db.session.commit() User.query.first()
全局钩子
# 导入表单扩展 生成form表单 自带前端验证
from wtforms import Form,StringField,PasswordField,SubmitField,validators
# 自定义表单类 控制我们的表单字段
class BookAddForm(Form):
# 文本框
uname = StringField(label="用户名:",validators=[validators.DataRequired()])
upass = PasswordField(label="密码:")
usub = SubmitField(label='注册')
# upass = PasswordField()
‘’’html’’’
{# <p> {{ bookaddform.uname.label }}{{ bookaddform.uname }}</p>#}
{# <p> {{ bookaddform.upass.label }}{{ bookaddform.upass }}</p>#}
数据库迁移
pip install flask-migrate
#这个命令会创建migrations文件夹,所有迁移文件都放在里面。
from flask_script import Shell,Manager
from flask_migrate import Migrate,MigrateCommand
manager = Manager(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)
#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)
Manager.run()
命令:
python database.py db init // 迁移初始化
python database.py db migrate -m 'initial migration' // 命名和添加迁移
python database.py db upgrade // 提交到数据库
python app.py db history // 返回以前的所有版本
输出格式:<base> -> 版本号 (head), initial migration
回滚到指定版本
python app.py db downgrade 版本号
Rollback:
# 所有的数据处理准备好之后,执行commit才会提交到数据库!
try:
book_name = request.form.get('book_name')
bo = Book(name=book_name,author_id=auth.id)
# 添加书籍
db.session.add(bo)
db.session.commit()
except Exception as e:
# 加入数据库commit提交失败,必须回滚!!!
db.session.rollback()
raise e
python-Web-flask-数据库的更多相关文章
- 【简说Python WEB】数据库
目录 [简说Python WEB]数据库 数据库表 docker安装MySQL Flask-SQLAlchemy操纵MySQL数据库 初始化 定义模型 定义关系 数据库的CRUD操作 创建表 inse ...
- python web -- flask
Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...
- Python Web Flask源码解读(一)——启动流程
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- Python Web Flask源码解读(二)——路由原理
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- Python Web Flask源码解读(四)——全局变量
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- Python Web Flask源码解读(三)——模板渲染过程
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- 选择一个 Python Web 框架:Django vs Flask vs Pyramid
Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...
- python web框架Flask——csrf攻击
CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
随机推荐
- WCF之WebService
一.Web Services简介 Web Services是支持客户端与服务器通过网络互操作的一种软件系统,是一组可以通过网络调用的应用程序API.在Web Services中主要到SOAP/UDDI ...
- java web项目为什么我们要放弃jsp?(转)
前戏: 以前的项目大多数都是java程序猿又当爹又当妈,又搞前端(ajax/jquery/js/html/css等等),又搞后端(java/mysql/Oracle等等). 随着时代的发展,渐渐的许多 ...
- Comet OJ - Contest #3 (A 比赛 加强版)二分答案
考试的时候同届神犇 JZYshurak 出了一个 n=$10^5$ 的数据加强版. 刚开始没什么思路,但是忽然想到这个可以转成二分判定+暴力枚举的模型. 二分 ans, 使得大于等于 ans 的值小 ...
- learning express step(十四)
learning express error handle code: const express = require('express'); const app = express(); const ...
- 51Nod 1701 最后的机会
1701 最后的机会 给定一字符串S,S非空,由小写字母组成,设v为S中元音字母的个数,c为辅音字母的个数."a", "e", "i", & ...
- GAN生成式对抗网络(三)——mnist数据生成
通过GAN生成式对抗网络,产生mnist数据 引入包,数据约定等 import numpy as np import matplotlib.pyplot as plt import input_dat ...
- 在Android中使用OpenGL ES开发第(五)节:GLSL基础语法
一.前期基础储备笔者之前的四篇文综述了Android中使用OpenGL ES绘制基本图形和实现了简单的相机预览,初次接触OpenGL ES开发的读者可能对其中新的概念比较迷惑,尤其是其中的顶点着色器( ...
- 2019腾讯前端技术大会资源TWeb
扫码关注公众号 回复“TWeb”即可获取“2019腾讯前端技术大会”的PPT
- 【spring源码分析】IOC容器初始化——查漏补缺(三)
前言:本文分析InitializingBean和init-method方法,其实该知识点在AbstractAutowireCapableBeanFactory#initializeBean方法中有所提 ...
- 20175313 张黎仙《Java程序设计》第十周学习总结
目录 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码调试中的问题和解决过程 四.代码托管 五.心得体会 六.学习进度条 七.参考资料 一.教材学习内容总结 第十二章内容 主要内容 杂项 ...