Flask数据库基本操作-SQLAlchemy

Flask数据库
D:使用扩展包flask-sqlalchemy来操作数据库(增删改查)
E:通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
U:常用的SQLAlchemy字段类型

类型名 python中类型 说明
Integer int 普通整数,一般是32位
SmallInteger int 取值范围小的整数,一般是16位
BigInteger int或long 不限制精度的整数
Float float 浮点数
Numeric decimal.Decimal 普通整数,一般是32位
String str 变长字符串
Text str 变长字符串,对较长或不限长度的字符串做了优化
Unicode unicode 变长Unicode字符串
UnicodeText unicode 变长Unicode字符串,对较长或不限长度的字符串做了优化
Boolean bool 布尔值
Date datetime.date 时间
Time datetime.datetime 日期和时间
LargeBinary str 二进制文件

常用的SQLAlchemy列选项

选项名 说明
primary_key 如果为True,代表表的主键
unique 如果为True,代表这列不允许出现重复的值
index 如果为True,为这列创建索引,提高查询效率
nullable 如果为True,允许有空值,如果为False,不允许有空值
default 为这列定义默认值

常用的SQLAlchemy关系选项

选项名 说明
backref 在关系的另一模型中添加反向引用
primary join 明确指定两个模型之间使用的联结条件
uselist 如果为False,不使用列表,而使用标量值
order_by 指定关系中记录的排序方式
secondary 指定多对多中记录的排序方式
secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件

①安装扩展包及导包
安装flask-sqlalchemy:pip install flask-sqlalchemy
如果连接的是mysql数据,需安装mysqldb:pip install flask-sqlalchemy
导包:from flask_sqlalchemy import SQLAlchemy
②配置相关数据库的设置
#数据库信息设置
app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘mysql://root:[email protected]:3306/数据库名‘
# 动态追踪修改设置,如未设置只会提示警告,极大影响mysql性能app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = False
③创建连接数据库的对象
db = SQLAlchemy(app)
④定义模型类,继承db.Model
定义数据库的表名: __tablename__   
设置字段: 字段=db.Column(db.字段类型,字段选项)   
     例如:id = db.Column(db.Integer, primary_key=True)
      name = db.Column(db.String(64), unique=True)
设置关联属性: books = db.relationship(‘Book‘, backref=‘author‘, lazy=‘dynamic‘)
给该模型类添加一个属性,第一个参数为多类类名,通过这个属性可以查询一对多所有对象
第二个参数backref =’该类类名小写‘,是反向给多类申明一个新属性
第三个参数指定是lazy属性,即何时加载数据,dynamic指的是在访问属性的时候,并没有在内存中加载数据,而是返回一个query对象, 需要执行相应方法才可以获取对象,比如.all()
⑤无迁移式的建表和删表
db.drop_all() 删除该数据库所有的表             db.create_all() 在该数据库下创建所有模型类映射的表

增删改查
增:①创建对象:  b =Book(name=‘图书‘)
       ②把数据添加到用户会话:db.session.add(b)      
    如果多个对象,使用db.session.add_all([b1,b2,b3])
③提交用户会话到数据库:  db.session.commit()
删:第一种方式:
①查出该对象:     b=Book.query.get(1)
②从用户会话删除该对对象:    db.session.delete(b)
③提交用户会话:  db.session.commit() 
第二种方式:
①查出对象直接删除:  Book.query.get(1).delete()
②提交用户会话:  db.session.commit() 
改:①查出该对象:      b=Book.query.get(1)
②修改对象属性:  b.name=‘小说‘
③提交用户会话:  db.session.commit() 
查:①无条件查询:Book.query.查询执行器
②条件查询:Book.query.过滤器.查询执行器
常用过滤器如下:

过滤器 说明 示例
filter(条件) 返回符合该条件的查询集,BaseQuery对象 Book.query.filter(Book.id==1)
filter_by() 返回符合该等值条件的查询集 Book.query.filter_by(id=1)
limit 使用指定的值限定原查询返回的结果  
offset() 偏移原查询返回的结果,返回一个新查询集  
order_by() 根据字段进行排序,默认是正序,返回新查询集,desc可以反序 Book.query.order_by(Book.id)
Book.query.order_by(Book.id.desc)
group_by() 根据字段进行分组,返回新查询集合  

常用查询执行器如下:

方法 说明 示例
all() 以列表形式返回查询的所有结果 Book.query.filter(Book.id==1).all()
first() 返回查询的第一个结果,如果未查到,返回None Book.query.filter(Book.id==1).first()
first_or_404() 返回查询的第一个结果,如果未查到,返回404  
get() 返回指定主键对应的行,如不存在,返回None Book.query.get(1)
get_or_404() 返回指定主键对应的行,如不存在,返回404  
count() 返回查询结果的数量 Book.query.count()
paginate() 返回一个Paginate对象,它包含指定范围内的结果,参数一:第几页,参数二:每页个数,参数3:如果没有该页数返回False Book.query.paginate(2,3,False)

逻辑非,逻辑与,逻辑或
from sqlalchemy import not_,and_,or_
示例:User.query.filter(not_(User.name==‘chen‘)).all()
              User.query.filter(and_(User.name!=‘wang‘,User.email.endswith(‘163.com‘))).all()

一对多,多对一关联查询
一对多:①先查询出一类对象,例如author=Author.query.get(1)
②根据我们设置的relationship属性获取这一类对象下的全部多类对象:
books=author.books                  (即该作者下全部书籍)
多对一:①查询出多类对象,例如book=Book.query.get(2)
②根据我们设置的backref反向设置的属性获取该多类对象对应的一类对象:
author =book.author                 (即这本书所属的作者)

flask数据库迁移
D:在数据库中建立模型类映射的数据库表,如果需要修改数据库模型,还要在修改之后更新数据库,最好的解决的方法使用数据库迁移框架Flask-Migrate
E:建立相关数据库表,而且追踪数据库模式的变化,然后把变动应用到数据库中,还可以回退版本。
U:迁移步骤:
①安装扩展包:迁移扩展包:pip install flask-migrate,脚本管理器包:pip install flask-script
②导包:from flask_migrate import Migrate,MigrateCommand                      from flask_script import Shell,Manager
③创建脚本管理器:manager= Manager(app)
④迁移关联应用和数据库:Migrate(app,db)
⑤添加迁移命令道脚本管理器:manager.add_command(‘db‘,MigrateCommand)
⑥使用脚本命令在命令行进行迁移操作:

创建迁移文件夹 python xxx.py db init
生成当前版本迁移文件 python xxx.py db migrate -m ‘版本说明‘
执行当前本迁移文件 python xxx.py db upgrade
回退一个迁移版本 python xxx.py db downgrade
查看迁移历史记录 python xxx.py db history
向上迁移到指定版本 python xxx.py db upgrade 版本号
向下迁移到指定版本 python xxx.py db downgrade 版本号
查看当前迁移版本 python xxx.py db current

原文地址:https://www.cnblogs.com/heimaguangzhou/p/11629730.html

时间: 2024-10-08 13:06:35

Flask数据库基本操作-SQLAlchemy的相关文章

flask数据库基本操作

数据库基本操作 在Flak-SQLAlchemy中,插入.修改.删除操作,均由数据库会话管理. 会话用db.session表示.在准备把数据写入数据库前,需要先将数据添加到会话中然后调用commit()方法提交会话. 在Flask-SQLAlchemy中,查询操作是通过query对象操作数据. 最基本的查询时返回表中所有数据,可以通过过滤器进行更精确的数据库查询. 定义模型类 一般实际工作中我们会把模型创建到单独的文件中,学习阶段我们先将模型类写在main.py文件中. from flask i

flask 数据库操作

说到flask中操作数据库首先要先引入一个概念:ORM ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射 其实它就是模型对象的概念,把数据库的信息映射成一个个对象来操作, 而不需要编写sql语句,简单来说就是面向对象编程的概念. flask 中的SQLAlchemy 就是一个ORM框架,它依赖于pymysql,使用关系对象映射对数据库进行操作 SQLAlchemy 的安装命令: pip install flask-sqlalchemy 下面就用代码展示使用S

3.22数据库基础知识:①数据类型②基本规则③数据库基本操作,增删改库,表

数据库:①数据类型②基本规则③数据库基本操作,增删改库,表 DATABASE 数据库Relational Database 关系型数据库column 列 row行Primary Key 主键 Foreign Key 外键DBMS 数据库管理系统 Database Management SystemRDBNS 关系型数据库管理系统SQL Structured Query Language 结构化查询语言SQL 分为:DDL DQL DML DCL 一.数据类型:1.整数型:INT BIGINT2.

数据库基本操作(二)--数据查询

//数据查询 create database JXGL; //创建数据库 use JXGL;//使用数据库 create table S( Sno char(10) not null unique, Sname char(20) not null unique, Ssex char(2), Sage int, Sdept char(20)); create table C( Cno char(2) not  null primary key (Cno), Cname char(20), Teac

1Python全栈之路系列之MySQL数据库基本操作

Python全栈之路系列之MySQL数据库基本操作 MySQL数据库介绍 MySQL是一种快速易用的关系型数据库管理系统(RDBMS),很多企业都在使用它来构建自己的数据库. MySQL由一家瑞典公司MySQL AB开发.运营并予以支持.它之所以非常流行,原因在于具备以下这些优点: 基于开源许可发布,无需付费即可使用. 自身的功能非常强大,足以匹敌绝大多数功能强大但却价格昂贵的数据库软件. 使用业内所熟悉的标准SQL数据库语言. 可运行于多个操作系统,支持多种语言,包括 PHP.PERL.C.C

mysql数据库基本操作练习

一.MySQL基本管理 1.使用mysql命令连接数据库. 2.练习查看/删除/创建库的相关操作. 3.练习查看/删除/创建表的相关操作. 实验步骤: 1.使用mysql命令连接数据库 连接MySQL服务器时,最基本的用法是通过 -u 选项指定用户名.-p指定密码.密码可以写在命令行(如果不写,则出现交互,要求用户输入),当然基于安全考虑一般不推荐这么做: [[email protected] ~]# mysql -uroot -p1234567         //可以紧挨着选项,不要空格 W

Oracle数据库基本操作 —— Oracle数据库体系结构介绍、DDL、DCL、DML

一.Oracle数据库介绍 1.基本介绍 Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一. 2.Oracle数据库的体系结构 ①数据库:database Oracle数据库是数据的物理存储.这包括(数据文件ORA或DBF.控制文件.联机日志.参数文件).Oracle数据的概念和其他数据库不一样,这里的数据库是一个操作系统只有一个库.可以看做是Oracle就只有一个

Flask数据库关系

基础配置 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]/flask' 一对多 class Singer(db.Model): id = db.Column(db.Integ

在flask中使用SQLAlchemy连接sqllite数据库

设置数据库路径非常重要: 方法: 1 配置数据库 basedir= os.path.abspath(os.path.dirname(__file__)) #获取当前文件的绝对路径 app = Flask(__name__) # 拼接数据库的URL路径 # os.path.join 把basedir和data.sqlite的路径拼接起来# # data.sqlite为数据库文件,若该文件夹下没有这个文件会自动创建 app.config['SQLALCHEMY_DATABASE_URI'] = 's