Django框架连接数据库

这里以同时连接sqlite、mysql、redis为例
首先要下载对应的sqlite、mysql、redis相应的模块插件
开始上代码
settings.py 配置文件

import os
# 引入mysql模块
import pymysql
# pymysql.install_as_MySQLdb()来确保pymysql能够兼容这些代码
pymysql.install_as_MySQLdb()# 数据库连接参数配置DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3', # 本地sqlite数据文件地址},#mysql 测试服务器参数配置'mysql': {'ENGINE': 'django.db.backends.mysql','NAME': 'root','USER': 'root','PASSWORD': 'root','HOST': '127.0.0.1','PORT': '3306',}
}
# 配置测试redis参数 DATABASES不支持redis 只能单独配置
COUSTOM_REDIS_CONFIG = {'PASSWORD': 'root','HOST': '127.0.0.1','PORT':6379,
}#【弃用】**** 这里的参数没有研究明白 刚感兴趣或者明白的小伙伴可以评论交流沟通下 一块成长 **** 
#【弃用】**** 这里的参数没有研究明白 刚感兴趣或者明白的小伙伴可以评论交流沟通下 一块成长 **** 
#【弃用】**** 这里的参数没有研究明白 刚感兴趣或者明白的小伙伴可以评论交流沟通下 一块成长 **** # 配置Redis作为缓存后端 【无法使用 key是 ascribe_to:pay_report_id 自动变成 1:ascribe_to:pay_report_id】
# from django.core.cache import caches  # 逻辑文件中 导入caches对象
# r = caches['alt_db3'] # 逻辑文件中 使用备用的Redis连接(第3个数据库)
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache','LOCATION': 'redis://180.184.93.11:6379/0',#配置指向第1个数据库(索引为0)'KEY_PREFIX': '',  # 默认键的前缀'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient','PASSWORD': 'xuannao!@#456',}},'alt_db3': {'BACKEND': 'django_redis.cache.RedisCache','LOCATION': 'redis://180.184.93.11:6379/2',  # 配置指向Redis的第3个数据库(索引为2)'KEY_PREFIX': '090',  # 默认键的前缀'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient','PASSWORD': 'xuannao!@#456',}}
}

test.py 逻辑文件

# 导入对应的模块
from django.conf import settings
import redis
from django.db import connections
import sqlite3
from advert.models import *
from django.db.models import CharField, IntegerField, Value
from django.db.models.functions import Length
from django.http import JsonResponse
import time# 连接mysql
mysql_connection = connections['mysql']# 或者 连接mysql
# mysql_connection = MySQLdb.connect(host="localhost", user="yourusername", passwd="yourpassword", db="yourdatabase")# 连接redis
r_host = settings.COUSTOM_REDIS_CONFIG['HOST']
r_port = settings.COUSTOM_REDIS_CONFIG['PORT']
r_pwd = settings.COUSTOM_REDIS_CONFIG['PASSWORD']
r = redis.Redis(r_host, r_port, 2, r_pwd)# 连接sqlite
sqlite_connection = sqlite3.connect(settings.DATABASES['default']['NAME'])
sqlite_cursor = sqlite_connection.cursor()# 获取mysql数据 以原生sql方式举例
# 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义查询的条件:
sql = "select id,user_id from ln_user_recharge where status = 2 and id > %s order by id asc"
cursor.execute(sql, (pay_order_id,)) # pay_order_id 作为id的条件
rows = cursor.fetchall() # 查询全部结果 更多查询方式 参考python或者Django手册即可# 获取sqlite数据 以原生sql方式举例 和mysql类似
# 执行查询 获取sqlite中用户的oaid 和 渠道
sqlite_sql = "SELECT oaid,uid,channel FROM advert_clientreport WHERE uid = ? and LENGTH(oaid) > 30"
sqlite_cursor.execute(sqlite_sql, (user_id,))
# 获取查询结果
sqlite_results = sqlite_cursor.fetchall()# 获取sqlite数据 以models的方式 基于Django框架 更多请参考Django框架
reporting = ClientReport.objects.annotate(oaid_length=Length('oaid', output_field=IntegerField())).filter(uid=user_id,oaid_length__gt=30)# redis举例
r.set('key','value')
r.get('key')

models.py 数据库文件

from django.db import models
from django.db.models import Sum# sqlite 数据表3
class ClientReport(models.Model):oaid = models.CharField(max_length=128, verbose_name="OAID设备号", null=True, blank=True)idfa = models.CharField(max_length=128, verbose_name="IDFA识别码", null=True, blank=True)imei = models.CharField(max_length=128, verbose_name="IMEI序列号", null=True, blank=True)mac = models.CharField(max_length=128, verbose_name="MAC地址", null=True, blank=True)uip = models.CharField(max_length=64, verbose_name="IP地址", null=True, blank=True)ua = models.CharField(max_length=255, verbose_name="UserAgent", null=True, blank=True)uid = models.IntegerField(verbose_name='新用户ID', null=True, blank=True, db_index=True)version = models.CharField(max_length=32, verbose_name="版本号", null=True, blank=True)client = models.CharField(max_length=32, verbose_name="客户端", default='1', choices=CLIENT_DICT)channel = models.CharField(max_length=32, verbose_name="下载渠道", null=True, blank=True)sex = models.CharField(max_length=8, verbose_name="性别", null=True, blank=True, choices=SEX_DICT)is_true = models.BooleanField(default=True, verbose_name="是否真实")isvalid = models.BooleanField(default=False, verbose_name="是否有效")create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True, null=True)class Meta:app_label = 'advert'verbose_name_plural = '客户端上报'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go中的控制反转 IoC

以嵌入组合的方式实现控制反转 IoC: 控制反转是一种解耦思想,将原本耦合在业务逻辑中的控制逻辑单独拆出来实现,不再让业务逻辑在处理业务的同时还要去实现控制逻辑,而是专注处理业务。在业务逻辑代码中耦合进控制逻辑,会导致在编…

window搭建本地mongo数据库并导入数据

1 window下载mongo数据库 官网:www.mongodb.com 选择 Products > Community Edition 就能进入社区版 在这里下载 windows 版对应的安装包 注意:6.0.1 版本的 MongoDB 配置环境变量有问题,并且我不知道怎么解决,如果想要避免出…

算法学习05:离散化、区间合并

算法学习05:离散化、区间合并 文章目录 算法学习05:离散化、区间合并前言需要记忆的模版:一、离散化1.例题:离散化 区间和:拓展: 二、区间合并(贪心)1.例题: 总结 前言 需要记忆的模…

基于FastAPI构造一个AI模型部署应用

前言 fastapi是目前一个比较流行的python web框架,在大模型日益流行的今天,其云端部署和应用大多数都是基于fastapi框架。所以掌握和理解fastapi框架基本代码和用法尤显重要。 需要注意的是,fastapi主要是通过app对象提供了web服务端的实现代…

tidyverse提取MergedGenes列包含“sss“字符的行

要使用tidyverse包在R中提取包含特定字符串“sss”字符的MergedGenes列的行,可以使用dplyr包中的filter()函数和str_detect()函数来实现。这里的str_detect()函数来自stringr包,它是tidyverse的一部分,用于检测字符串是否符合给定的模式。以下…

基于php的用户登录实现(v1版)(持续迭代)

目录 版本说明 数据库连接 登录页面:login.html 登录处理实现:login.php 用户欢迎页面:welcome.php 用户注册页面:register.html 注册执行:DoRegister.php 版本说明 v1实现功能: 数据库连接&#x…

SOCKS5代理与网络安全的舞蹈

在这个信息爆炸的时代,网络安全成为了每个网民乃至每个软件工程师的头等大事。今天,我们要聊的是如何使用SOCKS5代理和代理IP来保护我们的网络安全,同时还不失趣味性。这听起来可能有点枯燥,但别担心,我们会用一种轻松…

自定义限流注解

自定义注解 /*** 速率限制注解** author: 张定辉* date: 2024/3/5 21:29* description: 速率限制注解*/ Target({ElementType.TYPE,ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface RateLimit {/*** SPEL表达式* <p>* 1.使用方法的基本类型参…

SpringAOP面向切面编程-代理

目录 1.静态代理 2.动态代理 代理在开发中实现的方式具体有两种&#xff1a;静态代理&#xff0c;[动态代理技术] 1.静态代理 主动创建代理类 public class CalculatorStaticProxy implements Calculator {// 将被代理的目标对象声明为成员变量private Calculator target;…

面试问答之MySQL数据库进阶

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; MySQL架构&#x1f415;数据库引擎&#x1f415; InnoDB存储存储引擎&#x1f415;MYISAM &#x1f3e8;索引&#x1f415;哪些情况需要创建…

vue3+element-plus el-input 自动获取焦点

虽然element有提供input的autofocus属性&#xff0c;但是当我们第二次进入页面就会发现autofocus已经不再生效&#xff0c;需要通过onMounted去触发input的focus解决这个问题。 1.先给el-input绑定一个ref&#xff1a;<el-input ref"inputRef" v-model"inp…

景联文科技:专业提供高质量大语言模型训练数据

2024年&#xff0c;数字经济被再次写入政府工作报告中&#xff0c;报告指出要深化大数据、人工智能等研发应用&#xff0c;打造具有国际竞争力的数字产业集群。 大模型作为生成式人工智能的基础&#xff0c;日益成为国际科技竞争的焦点。人大代表杨剑宇指出&#xff0c;尽管我国…

008-slot插槽

slot插槽 1、插槽 slot 的简单使用2、插槽分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&…

老阳分享:视频号带货的四大技巧

视频号带货作为新兴的电商模式&#xff0c;在微信这个庞大的社交平台上展现出了巨大的潜力。要想在视频号带货领域取得成功&#xff0c;需要掌握一定的技巧。本文将为您详细解析视频号带货的四大技巧&#xff0c;感兴趣的朋友一起去看看吧。 一、内容创新 内容创新是视频号带货…

【深度学习笔记】5_11 残差网络ResNet

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.11 残差网络&#xff08;ResNet&#xff09; 让我们先思考一个问题&#xff1a;对神经网络模型添加新的层&#xff0c;充分训练后的…

Express框架的产生

Express框架的产生&#xff0c;解决的痛点是什么&#xff1f; 1.优化Node.js在Web的开发 Express框架是一个基于Node.js的Web应用程序开发框架&#xff0c;它的产生主要是为了解决Node.js在Web开发中的一些痛点。 在Node.js出现之前&#xff0c;Web开发主要是基于传统的后端…

springboot项目集成,项目流程概述

一、项目介绍 二、项目设计原则 2.1整体原则 2.2持久层 2.3业务逻辑层 具体分析 三、实战 3.1项目搭建 <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-crypto</artifactId></dependency>&l…

双链表的实现(数据结构)

链表总体可以分为三大类 一、无头和有头 二、单向和双向 三、循环和不循环 从上面分类得知可以组合成8种不同类型链表&#xff0c;其中单链表最为简单&#xff0c;双联表最为复杂&#xff0c;两种链表都实现后其余链表都不成问题。 我们前期博客已将完成了单向无头不循环链表…

基于PHP的景点数据分析系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 关键理论与技术 3 1.1 框架技术 3 1.1.1 QueryList 3 1.1.2 ThinkPHP 3 1.1.3 Amaze UI 3 1.2 数据可视化技术 4 1.3 数据库技术 4 1.4 本章小结 4 2 需求分析 5 2.1 业务流程分析 5 2.2 功能需求分析 5 2.3 用例分析 7 2.4 非功能性需求…

it-tools工具箱

it-tools 是一个在线工具集合&#xff0c;包含各种实用的开发工具、网络工具、图片视频工具、数学工具等 github地址&#xff1a;https://github.com/CorentinTh/it-tools 部署 docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:lat…