Flask数据库

转载:Flask数据库 - 苦行僧95 - 博客园 (cnblogs.com)

Flask-SQLAlchemy

Flask-SQLAlchemy是在Flask中操作关系型数据库的拓展。是以面向模型对象的形式操作数据库,通过迁移完成建表

安装第三方库

pip install Flask-SQLAlchemy==2.2
pip install Flask-MySQLdb==0.2.0

基本配置

from flask_sqlalchemy import SQLAlchemy
# 配置数据库访问链接
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:123456@127.0.0.1:3306/demo"
# 设置是否追踪数据库的增删改查,一般设置为False
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Flase
# 创建SQLAlchemy对象,,并与当前数据库关联,TCP连接
db = SQLAlchemy(app)

 

自定义模型

class Publishers(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
address = db.Column(db.String(64)) def _str_(self): # print显示内容做设置
return self.name def _repr__(self): # 对列表中显示内容做设置
return self.name

对数据库增删改查

#第一种方法
user = User(name="laowang", age=18)
db.session.add(user) # 逻辑添加
db.session.commit() #第二种方法
user = User()
user.name = "laoli"
user.age = 18
db.session.add(user) # 逻辑添加
db.session.commit()

es = User.query.filter_by(name="laowang").first()
db.session.delete(es)
db.session.commit()

es = User.query.filter_by(id=3).first()
res.name="lisi"

模型类名.query.过滤器.查询执⾏行行器器

 

过滤器

返回BaseQuery类型对象 并不是最终的数据 最终的数据由 查询执行器获取

filert()  按照条件查找

比如:

User.quer.filter(User.name = "lisi")

filter_by()  按照条件精确查找

比如:

User.query.filter_by(id=1)

查询执行器

返回最终的结果

all()  返回查询到的所有结果,是一个列表, User.query.filter(User.name != 'wang').all()

first()  返回查询的第一个结果,User.query.filter(User.name != 'wang').first()

get()  返回主键对应的行, User.query.get(1)

count()  返回查询结果的数量 User.query.count()

paginate()  参数分别对应的是要查询的是第几页,每页几条数据,如果有错是否输出。 User.query.paginate(2, 3, False),这个例子是,每页三条数据,查询第二页的数据

关于查询的一些练习

排序

order_by()

例子:

# 正序
User.query.order_by(User.name)
# 倒序
User.query.order_by(User.name.desc())

一对多关系

在说一对多关系的时候,用的是班级表和学生表,班级模型类:Class,学生模型类:Student

一查多

relationship

在一的那一方,建立跟多的那一方的关联属性

# 在班级模型类中定义
student = db.relationship("Student")
# 查询
class = Class.query.get(1)
class.student

多对多关系

多对多是通过建立中间表实现的。中间表值记录关系和存储关系字段。

这个中间表将互为多对多的关系表的主键设为外键。

这个关系表是直接建立的,不适用于模型类映射

 

lazy属性

在一对多查询的时候,如果已经查询出一的那一方,可以决定多的那一方数据查询的时机,是在查出一后立即查出多的数据(默认),还是在使用的时候才去查询。

设置查出一就同时查出多

student = db.relationship("Student", backref = "class", lazy = "subquery")

class = Class.query.get(1)

class.student

如例子中,lazy设置为subquery之后,class.student会显示所有记录。

设置用到多是再查多

student = db.relationship("Student", backref = "class", lazy = "dynamic")

class = Class.query.get(1)

class.student

如例子中,lazy设置为subquery之后,class.student不会显示所有记录,可以用class.student[0]这样的下标取值。

python Flask 操作数据库的更多相关文章

  1. python Flask 操作数据库(2)

    单表操作 数据准备 from flask import Flask from flask_sqlalchemy import SQLAlchemy class Config: DEBUG = True ...

  2. Python——Flask框架——数据库

    一.数据库框架 Flask-SQLAlchemy (1)安装: pip install flask-sqlalchemy (2)Flask-SQLAlchemy数据库URL 数据库引擎 URL MyS ...

  3. flask 操作数据库(分类)

    数据库 数据库是大多数动态web程序的基础设施,只要你想把数据存下来,就离不开数据库. 这里所说的数据库指的是有存储数据的单个或多个文件组成的集合,它是一种容器,可以类比文文件柜.而人们通常使用数据库 ...

  4. MySQL---连接器(python如何操作数据库媒介,基于python语言)

    MySQL — 连接器 连接器的概念 它们往往是一类Python包,或者是一类已经写好的Python库.这些库提供了我们Python去连接数据库服务器的基本功能. ​ 既然它是一个包,那么我们首先学会 ...

  5. Python:操作数据库

    (一)      前言 本文说明如何连接Oracle.MySQL.sqlserver,以及执行sql.获取查询结果等. (二)      DB-API      DB-API阐明一系列所需对象和数据库 ...

  6. Python连接操作数据库

    步骤: 1.创建与数据库的连接对象: 2.创建游标: 3.通过游标执行语句 4.增删改需要提交(commit)数据 5.关闭连接 如: import MySQLdb   # Python通过MySQL ...

  7. python中操作数据库

    python中要操作数据库,要使用该数据库在python中对应的驱动库,本文介绍python操作mysql数据库 1.首先安装pymysql 2.导入库 3.建立连接 4.建立游标 5.发起请求 6. ...

  8. python 连接操作数据库(二)

    一.我们接着上期的博客继续对ORM框架进行补充,顺便把paramiko模块也给大家讲解一下: 1.ORM框架: 在连接操作数据库的第一个博客中也已经说了,sqlalchemy是一个ORM框架,总结就是 ...

  9. python 多线程操作数据库

    如果使用多线程操作数据库,容易引起多用户操作锁表 OperationalError: (2013, 'Lost connection to MySQL server during query') 使用 ...

随机推荐

  1. MySQL的日志文件

    本文将重点介绍MySQL的日志文件类型,并讲解其作用,并结合一定实操演示,相信跟着做下来你会对MySQL有更深的理解. 文件的概念 在开始讲MySQL日志文件之前,首先我们要明确一下文件的概念.MyS ...

  2. 用copyof来复制数组

    public static void main(String[] args) { //Arrays.copyOf将数组复制到另一个数组,截断.扩容 String[] a={"1", ...

  3. Condition介绍

    Condition Condition是一种多线程通信工具,表示多线程下参与数据竞争的线程的一种状态,主要负责多线程环境下对线程的挂起和唤醒工作. 方法 // ========== 阻塞 ====== ...

  4. Unity——滚动的小球

    Unity--滚动的小球 工程理解 本游戏为通过键盘上的W.A.S.D键控制小球的运动轨迹来对固定位置上的小方块进行碰撞,以此来进行加分计数的. 其中主要对象为小球和自转的小方块:在小球上,我们添加刚 ...

  5. 云数据库时代,DBA将走向何方?

    摘要:伴随云计算的迅猛发展,数据库也进入了云时代.云数据库不断涌现,产品越来越成熟和智能,作为数据库管理员的DBA将面临哪些机遇和挑战?又应该具备什么能力,才能应对未来的不确定性? 本文分享自华为云社 ...

  6. 【lwip】09-IPv4协议&超全源码实现分析

    目录 前言 9.1 IP协议简述 9.2 IP地址分类 9.2.1 私有地址 9.2.2 受限广播地址 9.2.3 直接广播地址 9.2.4 多播地址 9.2.5 环回地址 9.2.6 本地链路地址 ...

  7. jquery datatable 粗犷

    需要学习: HTML.CSS.Javascript Bootstrap: 基于以上三个的一个框架 jQuery:一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程 ...

  8. Appscan安全扫描问题-会话检测失败

    在进行手动探索-使用浏览器记录时,在后续的继续探索中经常碰到会话检测失败的问题.然而在[配置-登录管理-自动]中记录账号密码后再继续探索仍然提示会话检测失败....网上查找了资料,从该博主的博文中成功 ...

  9. C语言嵌套for循环实现冒泡排序

    使用嵌套for循环实现冒泡排序的一个函数. #include<stdio.h> /** * 介绍: * 使用嵌套for循环实现冒泡排序,由小到大(上小下大). * 参数: * sum[]: ...

  10. Kubernetes安装GitLab

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying Kubernetes安装GitLab Step 1 ...