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

使用数据库增删该查

  1. #创建SQLAlchemy对象,读取app中配置信息
  2.  
  3. db = SQLAlchemy(app)#定义角色模型(一方)
  4.  
  5. class Role(db.Model):
  6.  
  7. # 定义表名
  8.  
  9. __tablename__ = 'roles'
  10.  
  11. # 定义列对象
  12.  
  13. id = db.Column(db.Integer, primary_key=True)
  14.  
  15. name = db.Column(db.String(64), unique=True)
  16.  
  17. #设置关系属性,方便查询使用
  18.  
  19. us = db.relationship('User', backref='role')
  20.  
  21. #重写__repr__方法,方便查看对象输出内容
  22.  
  23. def __repr__(self):
  24.  
  25. return 'Role:%s'% self.name
  26.  
  27. if __name__ == '__main__':
  28.  
  29. #删除所有和db相关联的表
  30.  
  31. db.drop_all()
  32.  
  33. #创建所有和db相关联的表
  34.  
  35. db.create_all()
  36.  
  37. app.run(debug=True)
  38.  
  39. # 一对多
  40.  
  41. class Role(db.Model):
  42.  
  43. #关键代码反向查寻
  44.  
  45. us = db.relationship('User', backref='role', lazy='dynamic')
  46.  
  47. ...
  48.  
  49. class User(db.Model):
  50.  
  51. # 外键
  52.  
  53. 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()#与

  1. # 查询后删除
  2.  
  3. user = User.query.first()
  4.  
  5. db.session.delete(user)
  6.  
  7. db.session.commit()
  8.  
  9. User.query.all()
  10.  
  11. # 更新
  12.  
  13. user = User.query.first()
  14.  
  15. user.name = 'dong'
  16.  
  17. db.session.commit()
  18.  
  19. User.query.first()

全局钩子

  1. # 导入表单扩展 生成form表单 自带前端验证
  2.  
  3. from wtforms import Form,StringField,PasswordField,SubmitField,validators
  4.  
  5. # 自定义表单类 控制我们的表单字段
  6.  
  7. class BookAddForm(Form):
  8.  
  9. # 文本框
  10.  
  11.   uname = StringField(label="用户名:",validators=[validators.DataRequired()])
  12.  
  13.   upass = PasswordField(label="密码:")
  14.  
  15. usub = SubmitField(label='注册')

# upass = PasswordField()

‘’’html’’’

{#  <p> {{ bookaddform.uname.label }}{{ bookaddform.uname }}</p>#}

{#  <p> {{ bookaddform.upass.label }}{{ bookaddform.upass }}</p>#}

数据库迁移

pip install flask-migrate

  1. #这个命令会创建migrations文件夹,所有迁移文件都放在里面。
  2.  
  3. from flask_script import Shell,Manager
  4.  
  5. from flask_migrate import Migrate,MigrateCommand
  6.  
  7. manager = Manager(app)
  8.  
  9. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test'
  10.  
  11. app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
  12.  
  13. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
  14.  
  15. db = SQLAlchemy(app)
  16.  
  17. #第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
  18.  
  19. migrate = Migrate(app,db)
  20.  
  21. #manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
  22.  
  23. manager.add_command('db',MigrateCommand)
  24.  
  25. 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:

  1. # 所有的数据处理准备好之后,执行commit才会提交到数据库!
  2.  
  3. try:
  4.  
  5. book_name = request.form.get('book_name')
  6.  
  7. bo = Book(name=book_name,author_id=auth.id)
  8.  
  9. # 添加书籍
  10.  
  11. db.session.add(bo)
  12.  
  13. db.session.commit()
  14.  
  15. except Exception as e:
  16.  
  17. # 加入数据库commit提交失败,必须回滚!!!
  18.  
  19. db.session.rollback()
  20.  
  21. raise e

python-Web-flask-数据库的更多相关文章

  1. 【简说Python WEB】数据库

    目录 [简说Python WEB]数据库 数据库表 docker安装MySQL Flask-SQLAlchemy操纵MySQL数据库 初始化 定义模型 定义关系 数据库的CRUD操作 创建表 inse ...

  2. python web -- flask

    Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...

  3. Python Web Flask源码解读(一)——启动流程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  4. Python Web Flask源码解读(二)——路由原理

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  5. Python Web Flask源码解读(四)——全局变量

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  6. Python Web Flask源码解读(三)——模板渲染过程

    关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...

  7. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  8. 选择一个 Python Web 框架:Django vs Flask vs Pyramid

    Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...

  9. python web框架Flask——csrf攻击

    CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...

  10. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

随机推荐

  1. java后台表单字符串长度验证

    1.方法封装前提实体类属性去除首尾空白并进行反转义 //实体类属性的get方法 public String getContent() { if(!"".equals(字符串属性名) ...

  2. 记一次k8s服务504 timeout

    线上服务做集群扩容,调整了节点机器配置,在升级完毕之后,发现某些时候请求较慢,或者直接504 timeout 超时,必现情况,点击几次都是,且并没有代表性. 1.检查istio 日志是否有504 的日 ...

  3. 出现错误时返回异常 MVC

    在使用MVC的时候,会出现异常提醒: 1,当在Controller出现错误的时候,我们可以直接返回,即return  view()返回视图. ViewBag.Msg("产品或赠品不存在&qu ...

  4. 001_89C52之_Proteus_ADC0809采集电压

    一)使用ADC0809采集直流电压 1. 第一个数码管显示的是采样输入口 2. 后面三位是采样电压 (二)使用ADC0809进行交流电的采样 1. 先进行交流电降压,即用变压器降压后使用整桥电路进行整 ...

  5. springmvc集成webService需要的jar包

  6. 牛客 17439:Endless Pallet

    题目传送门 算法:min-max 容斥.树上背包.NTT. 题意简述 有一棵 \(n\) 个点的树.一开始所有点都是白色,每次操作会随机选择 \(\frac{n \times (n + 1)}{2}\ ...

  7. 全局变量异步I/O

    /*** sync_process.c ***/ #include <stdio.h> #include <signal.h> #include <unistd.h> ...

  8. 如何更改电脑ip

    首先打开控制面板==>点击网络和internet==>点击网络和共享中心==>点击更改适配器设置==>右键无线连接或宽带连接(视情况而定)==>属性==>双击ipv ...

  9. WEB自动化测试(UFT与Selenium)课程及视频教程

    自动化测试UFT与Selenium详细视频教程科目如下: 1.自动化测试基础-2.UFT自动化测试详解-3.UFT高级测试开发-4.自动化测试框架设计-5.UFT综合实战-6自动化测试-Seleniu ...

  10. MySQL数据分析实战-朱元禄-专题视频课程

    MySQL数据分析实战-496人已学习 课程介绍        本套课程由知名数据分析博主jacky老师录制,深入浅出讲解MySQL数据分析,从实战角度出发,帮助大家制胜职场!课程收益    1.学会 ...