在web中 数据库的是重要的一环 承载着保存数据的重要性
数据库分为两种 sql关系型数据库 Nosql 非关系型数据库
sql关系型数据库
每一行代表一个记录 每个记录的列为一个字段
sql结构:
表 : 储存数据的结构
列 : 一个字段 代表存储信息的类型
行 : 一条记录
Nosql非关系型数据库
非关系型数据库 不使用表结构存储数据 应为速度快 可拓展性强被大型web项目广泛使用
二者各有千秋 这里我们学习的是sql关系型数据库 用的数据库类型为mysql
Flask-SQLAlchemy基础
准备 : pipenv flask-SQLAlchemy
导入 : from flask_sqlalchemy import SQLAlchemy
注册 : db = SQLAlchemy(app)
flask 连接每个数据库都要有一个uri
一般数据库uri 的格式为 数据库://username:password@host/数据库名
在这里mysql我的mysql uri为 mysql://username:password@host/database
定义数据库模型
数据库模型常用字段类型
字段类型 | 说明 |
Integer | 整数 |
String | 字符串 |
Text | 文本 |
Date | 日期 |
Time | 时间 |
DateTime | 日期时间 |
Interval | 时间间隔 时间戳 |
Float | 浮点数 |
Boolean | 布尔 |
PickleType | 序列化对象 |
LargeBinary | 二进制数据 |
String需要传入参数 限制长度 Text 类型虽然好用 不限制长度 但是为了性能考虑最好使用String 仅在特定情况下使用Text
SQLAlchemy 字段参数
参数 | 内容 |
primary_key | 主键 |
unique | 字段不允许重复 |
index | 字段创建索引 提高查询效率 |
nullable | 字段口否为空 True 为非空 |
default | 默认值 |
下面我们定义一个表模型
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('setting') # 这里写了数据库的基本配置
db = SQLAlchemy(app)
class User(db.Model): # 传入参数
__tablename__ = 'user' # 自定义表名 不设置为User的小写
id = db.Column(db.Integer, primary_key=True) # 定义字段 id设置主键约束
name = db.Column(db.String(10), nullable=False) # 定义name字段 不能空
age = db.Column(db.Integer, nullable=False) # 定义age字段
db.create_all() # 创建数据库
print('数据库创建成功')
一切定义完成之后 只要使用
db.create_all( )就可以完成数据库的创建
db.drop( ) 删除数据库
在生产中会遇到重用的操作 我们可以编写使用方法
数据库操作
数据库操作有 create(创建) read(读取) update(更新) delete(删除)
1.create 创建
顺序为 :
创建python对象 : user = User(name=‘tom’,age=18)
添加到会话中 : db.session.add_all( )
提交会话 : db.session.commit( )
2.read 读取
读取方法为:
<模型类>.query.<过滤方法>.<查询方法>
过滤方法为:
过滤方法 | 说明 |
filter( ) | 使用规则判断返回符合条件的记录 |
filter_by( ) | 使用参数传入 符合条件则返回 |
ord_by( ) | 对记录进行排序 |
limit( ) | 限制数量 |
group_by( ) | 分组 查询 |
offset( ) | 偏移查询结果 |
filter( ) 和 filter_by( ) 方法非常相似 但是filter_by( ) 更利于使用 只需要传入字段就可以了
查询方法为:
查询方法 | 说明 |
all( ) | 所有的查询记录 |
first( ) | 查询的第一条记录 |
one( ) | 返回仅允许1条记录 如果不为1 则抛出错误 |
get( id) | 传入主键作为参数 查询记录 未找到为None |
count( ) | 返回查询结果的数量 |
one_or_none( ) | 类似one( ) 但是如果不为1 则返回none |
first_or_404( ) | 查询第一条 没找到则抛出404 |
get_or_404( id ) | 传入id查询 如果没找到则抛出404 |
3.update 更新数据库数据
只需要给参数赋值 然后commit提交就可以更新数据库
例 : name = User.query.get( 1 )
name.user = ‘liutao’
db.session.commit( )
这里不需要用add添加 因为本身就处于回话中 所以不需要添加
4.delete 删除记录
只需要删除参数 然后提交就可以了
例
user = User.query.get( 1 )
db.session.delete( id ) 删除主键为1的所有记录
函数中操作数据库
1.create
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('setting') # 这里写了数据库的基本配置
db = SQLAlchemy(app)
class User(db.Model): # 传入参数
__tablename__ = 'user' # 自定义表名 不设置为User的小写
id = db.Column(db.Integer, primary_key=True) # 定义字段 id设置主键约束
name = db.Column(db.String(10), nullable=False) # 定义name字段 不能空
age = db.Column(db.Integer, nullable=False) # 定义age字段
db.create_all() # 创建数据库
print('数据库创建成功')
@app.route('/')
def hello():
user = User(name='tom', age=18)
db.session.add(user)
db.session.commit()
return '写入数据成功'
if __name__ == '__main__':
app.run()
这时只要访问 "http://127.0.0.1:5000/"就可以完成数据库 并且 成功写入数据
效果图为:
2.read
我们这里查 数据库数据 然后在网页中显示出来
@app.route('/read/')
def read():
user = User.query.all() # 这里返回的是列表 所有要遍历
for user in user:
name = user.name
age = user.age
return f'{name} {age}' # 返回数据 这里有个bug 只能返回一次 但是我就不调 任性
这里访问http://127.0.0.1:5000/read/ 就可以得出数据库的数据
3.update
更新数据效果和以上一样 只要在代码中实现
给参数赋值 然后commit提交就可以更新数据库
4.delete
自行幻想
表之间关联没有看懂 实际用法等到实际用到的时候在继续编写
以上为数据库总结回顾笔记 若侵权 请联系
我将第一时间删除并道歉 谢谢 !