热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:数据模型续

本文由编程笔记#小编为大家整理,主要介绍了数据模型续相关的知识,希望对你有一定的参考价值。#数据模型###
本文由编程笔记#小编为大家整理,主要介绍了数据模型续相关的知识,希望对你有一定的参考价值。



# 数据模型
### 模型关系
- 一对多(使用最多)
- 一:学生(Student)
- 添加反向引用
- 多:文章(Article)
- 添加外键关联
- 一对一
- 一:学生(Student)
- 添加反向引用(在一对多的基础上多添加属性:`uselist=False`)
- 一:详情(Profile)
- 添加外键关联
- 多对多
- 多:学生(Student)
- 需要添加反向引用
- 需要使用`secondary`指定中间关联表
- 设置反向查询数据的加载时机,需要使用:`db.backref`
- 多:课程(Course)
- 中间关联表:此表不需要用户维护
- 表名
- 关联外键
### 模型总结
- 等价查询
```python
@app.route(
/query/)
def query():
# students
= Student.query.all()
# 与上面的方式等价
students
= db.session.query(Student).all()
return ,.join(s.name for s in students)
```
- group_by:分组查询
```python
@app.route(
/group/)
def group():
from sqlalchemy import func
ret
= db.session.query(Student.id, func.count(Student.id)).group_by(Student.id).all()
print(ret)
return 分组查询
```
> 分组查询并统计。
- 指定字段查询
```python
@app.route(
/select/)
def
select():
# ret
= db.session.query(Student.id, Student.name).all()
ret
= Student.query.with_entities(Student.name).all()
print(ret)
return 指定字段查询
```
- 分页查询:paginate,项目中讲解。
- SQL日志:就是查看执行过的SQL语句
```python
from flask_sqlalchemy import get_debug_queries
# 记录SQL日志,以下3个配置必须满足一个
# 调试模式
# app.config[
DEBUG] = True
# 测试模式
# app.config[
TESTING] = True
# 保存记录
app.config[
SQLALCHEMY_RECORD_QUERIES] = True
queries
= get_debug_queries()
for q in queries:
print(q)
```
### 数据缓存
- 说明:
因为数据库的速度是一个web应用性能的瓶颈,因此,为了提高访问效率,尽可能的减少数据库的操作。可以将经常访问的数据缓存起来,再次使用时直接从缓存中获取,而不是每次都操作数据库。
- flask-cache:专门负责数据缓存的扩展。
- 安装:`pip install flask-cache`
- 使用:
```python
from flask_cache import Cache
# 配置
# 缓存类型
app.config[
CACHE_TYPE] = redis
# redis主机
app.config[
CACHE_REDIS_HOST] = 127.0.0.1
# redis端口
app.config[
CACHE_REDIS_PORT] = 6379
# redis数据库
app.config[
CACHE_REDIS_DB] = 1
# 创建对象
cache
= Cache(app, with_jinja2_ext=False)
```
- 缓存视图函数
```python
# timeout:有效期,默认为300s
# key_prefix:键前缀
@cache.cached(timeout
=100, key_prefix=index)
def index():
print(
查询数据库)
return 数据缓存
```
- 清除缓存
```python
@app.route(
/delete/)
def delete():
# 指定删除
# cache.delete(
index)
# 清空全部
cache.clear()
return 缓存已删除
```
- 缓存普通函数
```python
# 缓存普通函数时最好指定key_prefix参数
# 因为不指定时,缓存的键前缀默认是调用的视图函数所在路由
@cache.cached(timeout
=10, key_prefix=aaa)
def aaa():
print(
查询数据库)
return hello world
# 缓存普通函数
@app.route(
/common/)
def common():
return aaa()
```
- 自定义缓存
```python
@app.route(
/test/)
def test():
# 先从缓存中获取数据
data
= cache.get(test_data)
if data:
# 有缓存,直接返回
return data
# 没有缓存
print(
读取数据库)
data
= 123456
# 将数据缓存起来
cache.
set(test_data, data, timeout=20)
return data
```
?

 


推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • andr ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
author-avatar
mobiledu2502862441
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有