from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 设置数据库的连接地址
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:[email protected]:3306/book20"
# 是否监听数据库变化 一般不打开, 比较消耗性能
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
# 创建数据库操作对象(建立了数据库连接)
db = SQLAlchemy(app)
# 作者表 一
class Author(db.Model):
__tablename__ = "authors"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(48), unique=True)
books = db.relationship("Book", backref="author") # 关系属性
# 书籍表 多
class Book(db.Model):
__tablename__ = "books"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(48), unique=True)
author_id = db.Column(db.Integer, db.ForeignKey("authors.id")) # 设置外键
@app.route('/')
def index():
return "index"
if __name__ == '__main__':
# 会删除所有继承db.Model的表
db.drop_all()
# 会创建所有继承自db.Model的表
db.create_all()
# 生成数据
au1 = Author(name='老王')
au2 = Author(name='老尹')
au3 = Author(name='老刘')
# 把数据提交给用户会话
db.session.add_all([au1, au2, au3])
# 提交会话
db.session.commit()
bk1 = Book(name='老王回忆录', author_id=au1.id)
bk2 = Book(name='我读书少,你别骗我', author_id=au1.id)
bk3 = Book(name='如何才能让自己更骚', author_id=au2.id)
bk4 = Book(name='怎样征服美丽少女', author_id=au3.id)
bk5 = Book(name='如何征服英俊少男', author_id=au3.id)
# 把数据提交给用户会话
db.session.add_all([bk1, bk2, bk3, bk4, bk5])
# 提交会话
db.session.commit()
app.run(debug=True)
数据库操作
必须进行异常捕获
增删改
操作失败, 需要回滚
多对多
关系, 必须定义一张关系表
来记录外键, 来实现两张表的关联作用: 在保留原数据
的前提下, 更新表结构
需要安装flask组件 flask-migrate
数据迁移需要依赖脚本启动
组件flask-script
(需要利用脚本启动组件生成迁移命令)
迁移命令
python hm_03_数据迁移.py mc init
自动
根据现有代码的数据库结构, 生成升级代码) python hm_03_数据迁移.py mc migrate -m "构建表结构"
python hm_03_数据迁移.py mc upgrade
python hm_03_数据迁移.py mc current
python hm_03_数据迁移.py mc history
python hm_03_数据迁移.py mc upgrade 956979
模块化
nosql: 非关系型数据库
数据以键值
方式存取, 不能像关系型数据库一样使用外键建立表之间的关系, 不适合用于关系特别复杂的数据查询场景
数据库存放形式很多, 每种非关系型数据库又有自己的使用场景
Redis优势
Redis应用场景
/etc/redis/redis.conf
sudo redis-server /etc/redis/redis.conf
sudo redis-cli -h 127.0.0.1 -p 6379
字典
格式栈结构, 先进后出
zset 有序集合 按照权重
进行排序
6个命令:
set 无序集合 无序且去重
3个命令
安装第三方包 pip install redis
from redis import StrictRedis
# 创建redis的操作对象(建立连接) decode_responses=True自动解码
sr = StrictRedis(host="127.0.0.1", port=6379, db=0, decode_responses=True)
# 操作redis
# 添加数据
sr.set("name", "zs", ex=10)
# 获取数据
print(sr.get("name"))
# 关闭数据库 只要设置了自动持久化策略, 都会将数据先保存到硬盘中, 再关闭
sr.shutdown()