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-数据库的更多相关文章

  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. Week08_day01 (Hive 自定义函数 UDF 一个输入,一个输出(最常用))

    当我们进入企业就会发现,很多时候,企业的数据都是加密的,我们拿到的数据没办法使用Hive自带的函数去解决,我们就需要自己去定义函数去查看,哈哈,然而企业一般不会将解密的代码给你的,只需要会用,但是我们 ...

  2. js-虚拟dom

    问题: vdom是什么?为什么存在vdom? vdom是如何应用的,核心的api是什么? 介绍一下diff算法 1.一些虚拟dom应用了snabbdom.其中的 h函数相当于渲染成了右侧的JS虚拟节点 ...

  3. CentOS7主机SSH连接失败

    说来话长,之前20刀一年买bandwagon的廉价VPS,由于做了一些违法的事情,导致ip被封了. 检测ip被封的方法:进入ping.chinaz.com:输入IP地址,如果国外节点能够Ping通而国 ...

  4. C# DocumentCompleted事件多次条用解决方案

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { ...

  5. mysql json数据类型

    概述 Mysql从5.7.8版本开始支持JSON字段,可以高效的处理JSON文档.相比字符串字段,JSON字段有下面的几处优势: 自动的校验JSON格式,无效的文档会产生错误 优化的存储格式(结构化的 ...

  6. 11、Spring Boot 2.x 集成 HBase

    1.11 Spring Boot 2.x 集成 HBase 完整源码: Spring-Boot-Demos

  7. Python 10.2

    time 模块: strftime('%y%m%s',yesterday) ==>返回一个字符串代表的日期

  8. Windows开发:窗口最大化问题

    MoveWindow(0, 0, 1920, 1080)和SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0)的区别 MoveWindow(, , , ); 我们可以分 ...

  9. PHP mysqli_close() 函数

    关闭先前打开的数据库连接: <?php $con=mysqli_connect("localhost","my_user","my_passwo ...

  10. mysql 常见ALTER TABLE操作

    删除列 alter table table-name drop col-name; 增加列(单列) alter table table-name add col-name col-type comme ...