热门标签 | 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
```
?

 


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文详细介绍了如何在CentOS 7操作系统上安装和配置Grafana,包括必要的依赖项安装、插件管理以及服务启动等步骤。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文深入探讨了Python中的高阶函数和Lambda表达式的使用方法,结合实际案例解析其应用场景,帮助开发者更好地理解和运用这些强大的工具。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
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社区 版权所有