Django的数据库配置、生成(创建)过程、写入数据、查看数据的学习过程记录

news2024/11/23 15:22:09

目录

  • 01-配置数据库信息
  • 02-安装Python的MySQL数据库驱动程序 mysqlclient
  • 03-安装Mysql,并启动Mysql
  • 04-定义Django的数据库模型(定义数据表-编写models.py文件)
  • 05-按照数据的配置生成数据库(执行迁移命令)
    • 05-01-生成迁移执行文件
    • 05-02-执行数据库模型迁移
  • 06-查看数据库
  • 07-向数据库写入数据并查看数据
  • 附完整代码

01-配置数据库信息

在文件:"E:\Python_project\P_001\myshop-test\myshop\myshop\settings.py"中写入以下数据库的配置信息:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'shop-test',
        'USER': 'shop-test',
        'PASSWORD': 'Aa_123456',
        'HOST': 'localhost',
        'PORT': '3306',
        # 取消外键约束,否则多对多模型迁移报django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint')
        'OPTIONS': {
            "init_command": "SET foreign_key_checks = 0;",
            'charset': 'utf8'
        },
    }
}

在这里插入图片描述

上面的代码比较好理解,就是对于语句:django.db.backends.mysql作一些说明:
在Django中,'django.db.backends.mysql'是一个数据库后端引擎的路径,用于指定使用MySQL作为数据库的后端。数据库后端引擎是Django用于与不同类型的数据库进行交互的组件。它提供了对数据库的连接、查询和数据操作的支持。

Django支持多个数据库后端引擎,例如MySQL、PostgreSQL、SQLite等。通过设置'ENGINE'选项,你可以指定使用的具体后端引擎。在这个例子中,'django.db.backends.mysql'表示使用MySQL作为数据库后端引擎。

通过选择不同的后端引擎,你可以使用不同类型的数据库来存储和检索数据,而Django提供的ORM(对象关系映射)功能将为你提供一致的数据访问接口,无论使用的是哪种数据库后端引擎。这样,你可以方便地切换和管理不同类型的数据库,而无需更改大量的代码。

在上面的配置中还取消了外键约束,否则在“多对多”模型关系的迁移中会出现下面的提示:

django.db.utils.IntegrityError:(1215, 'Cannot add foreign key constraint')

如果需要配置输出对应的数据库语句(*),则需要在"E:\Python_project\P_001\myshop-test\myshop\myshop\settings.py"写入下面的配置语句:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

上面的日志输出配置代码中的语句“‘disable_existing_loggers’: False,”是什么意思?
答:在Django的日志配置中,'disable_existing_loggers'是一个布尔值选项,用于指定是否禁用现有的日志记录器。它的作用是控制是否保留已经存在的日志记录器,而不是完全替换它们。

'disable_existing_loggers'设置为True时,将禁用现有的日志记录器。这意味着,在日志配置中定义的新的日志记录器会生效,而现有的日志记录器将被忽略。这通常用于完全替换默认的Django日志配置。

'disable_existing_loggers'设置为False时,保留现有的日志记录器。这意味着,新的日志记录器将与现有的记录器一起使用,不会替换它们。这通常用于扩展默认的Django日志配置,添加额外的日志记录器或修改现有记录器的行为。

在给定的配置语句中,'disable_existing_loggers': False表示不禁用现有的日志记录器,而是保留它们,并将新的日志记录器添加到现有的记录器集合中。这样可以确保现有的Django数据库后端日志记录器仍然有效,并将日志输出发送到控制台。

语句: ‘propagate’: True, 是什么意思?
答:在Django的日志配置中,'propagate'是一个布尔值选项,用于指定日志消息是否应该传播给更高级别的日志记录器。

'propagate'设置为True时,日志消息将传播给父级日志记录器。这意味着,如果当前的日志记录器无法处理日志消息,它将将消息传递给其父级记录器,以便其处理或传递给更高级别的记录器。传播使得日志消息可以在整个日志记录器层次结构中进行传递和处理。

'propagate'设置为False时,日志消息不会传播给父级日志记录器。如果当前的日志记录器无法处理日志消息,消息将被静默丢弃,不会传递给更高级别的记录器。

在给定的配置语句中,'propagate': True表示日志消息将传播给父级记录器。这意味着,如果'django.db.backends'记录器无法处理日志消息,它将传递给更高级别的记录器进行处理。通过设置为True,你可以确保数据库后端日志消息在整个日志记录器层次结构中传播,以便根据需要进行处理或记录。

02-安装Python的MySQL数据库驱动程序 mysqlclient

安装命令如下(安装前注意把代理工具关掉 ):

pip install -i https://mirrors.aliyun.com/pypi/simple mysqlclient

安装成功后如下图所示:
在这里插入图片描述

03-安装Mysql,并启动Mysql

在这里,可以用小皮面板来安装Mysql,当然也可以自己去Mysql的官网去下载安装包安装。
如果是用小皮面板来安装Mysql,则可以参考我之前写的博文:
https://blog.csdn.net/wenhao_ir/article/details/126170178
安装好后启动Mysql的服务:
在这里插入图片描述
然后切换到数据库,按第01步中的配置代码中的信息新建一个数据库:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

04-定义Django的数据库模型(定义数据表-编写models.py文件)

在"“E:\Python_project\P_001\myshop-test\myshop\app1\models.py”"中写入下面的内容:

from django.db import models

# Create your models here.


class User(models.Model):
    username = models.CharField(max_length=50)
    email = models.EmailField(unique=True)
    # 其他字段...

    def __str__(self):
        return self.username

    

05-按照数据的配置生成数据库(执行迁移命令)

关于为什么在Django中把数据库的生成称为叫迁移?请参看我写的另一篇博文,https://blog.csdn.net/wenhao_ir/article/details/131544152

05-01-生成迁移执行文件

通过下面的几条命令生成“迁移执行文件”:

CD E:\Python_project\P_001\myshop-test\myshop\
E:
manage.py makemigrations

上面的命令正常的话运行结果如下所示:
在这里插入图片描述
打开文件:“E:\Python_project\P_001\myshop-test\myshop\app1\migrations\0001_initial.py”
可以看到文件中包含当前模型的创建语句,0001_initial.py的内容如下:

# Generated by Django 3.2.10 on 2023-07-05 13:32

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('username', models.CharField(max_length=50)),
                ('email', models.EmailField(max_length=254, unique=True)),
            ],
        ),
    ]

05-02-执行数据库模型迁移

接上一步,用下面的三条语句实现执行数据库模型的迁移。

CD E:\Python_project\P_001\myshop-test\myshop\
E:
manage.py migrate

在这里插入图片描述

06-查看数据库

可以用工具“opendbviewer”查看数据库。
这个工具的百度网盘下载链接如下:
https://pan.baidu.com/s/19VxBiWHPmuJ_ApVgI3bqhA?pwd=e1te
安装完成后,连接数据库后就可以查看数据库了~如下图所示:
在这里插入图片描述

07-向数据库写入数据并查看数据

在路径:E:\Python_project\P_001\myshop-test\myshop\下新建文件 sql_test.py(与manage.py平级):
在这里插入图片描述
然后写入下面的代码:

import os
import django

# 设置Dango运行时需要的环境变量DJANGO_SETTINGS_MODULE
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')

# 加载Django的设置
django.setup()

# 导入模型
from app1.models import User

# 创建一个用户
user = User(username='john', email='john@example.com')
user.save()

对于语句os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')的解释:
当我们在Python中运行Django项目时,需要告诉Django要使用的项目设置(settings)。这些设置包括数据库配置、应用程序列表、静态文件路径等等。
怎么告诉Django项目的设置(settings)呢?通过环境变量 DJANGO_SETTINGS_MODULE 告诉。
在这里,os.environ.setdefault(key, value)是设置一个环境变量的方法。它接受两个参数:key是要设置的环境变量的名称,value是要为该环境变量设置的值。
'DJANGO_SETTINGS_MODULE'刚才已经说了它的作用,'myshop.settings'是设置变量的值,表示Django应该使用myshop项目中的settings.py文件作为项目的设置。

执行上面的代码即可向数据库写入数据,执行后我们再去看数据库的记录:
在这里插入图片描述
我们发现,在数据库shop-test的表User中已经有了一条新的记录。

我们再运行下面的代码,另外再写入一条新的记录:

import os
import django

# 设置Dango运行时需要的环境变量DJANGO_SETTINGS_MODULE
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')

# 加载Django的设置
django.setup()

# 导入模型
from app1.models import User

# 创建一个用户
user = User(username='suwenhao', email='2487872782.com')
user.save()

运行完成后,数据库中多新了一条新的记录:
在这里插入图片描述

附完整代码

https://pan.baidu.com/s/1mmNZyyV9lrmsTc0s1GvW1Q?pwd=i6g9

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

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

相关文章

Vue.js Js引入相关

Vue.js vue.js 新增了一些语法,有一些旧的模组并没有使用"先进"的export和import语法 即 es语法进行模块化。 <script></script>但 editor.md 真的很好用. 但很抱歉,它在vue中无法使用 es6 进行导入。 所以需要使用传统的方式进行导入。 很多人会把js…

【ARM Coresight 系列文章 2.1 - ARM Coresight 组件介绍】

文章目录 1.1 Coresight 组件介绍1.1.1 Trace sources1.1.2 Trace Sinks1.1.2 Trace links 1.1 Coresight 组件介绍 图 1-1 1.1.1 Trace sources 什么是 Trace source? 在ARM Coresight技术中&#xff0c;Trace Source是指处理器中的一个组件&#xff0c;用于产生和发送跟踪数…

全球十大看黄金走势免费app软件最新名单推荐(综合版)

选择黄金走势免费app软件时&#xff0c;有几个关键因素需要考虑。首先&#xff0c;要选择可靠的软件平台&#xff0c;确保其在金融市场上拥有良好的声誉和高度的信任度。此外&#xff0c;软件应提供及时准确的市场数据&#xff0c;包括实时行情、交易量和技术指标等&#xff0c…

高速PCB布局布线规范

目录 一、容抗/感抗 1.容抗 2.感抗 二、寄生电容/分布电容/杂散电容 1.寄生电容 2.分布电容 3.杂散电容 4.寄生电容/分布电容/杂散电容对信号的影响 5.怎么减小分布电容&#xff1f; 三.寄生电感 1.什么是寄生电感&#xff1f; 2.怎么减小寄生电感&#xff1f; 四.…

ROS:节点名称重名

目录 一、前言二、rosrun设置命名空间与重映射2.1设置命名空间2.2rosrun名称重映射2.3rosrun命名空间与名称重映射叠加 三、launch文件设置命名空间与重映射四、编码设置命名空间与重映射4.1C 实现:重映射4.2C 实现:命名空间4.3Python 实现:重映射 一、前言 ROS 中创建的节点是…

Python3在Windows上设置环境变量方法

Python3在Windows上设置环境变量方法&#xff0c;在环境变量中添加Python目录&#xff1a; 在命令提示框中(cmd) : 输入 path%path%;C:\Python 按下"Enter"。 注意: C:\Python 是Python的安装目录。 也可以通过以下方式设置&#xff1a; 右键点击"计算机&q…

《深入理解计算机系统》(9)内存管理

1、物理和虚拟寻址 物理寻址 主存被组织成一个由 M 个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址。CPU 访问内存最自然的方式就是使用物理地址&#xff0c;称为物理寻址。下图是一个物理寻址的示例&#xff0c;该示例的上下文是一个加载指令&#xff0c;它…

群载波应急广播主机的应用

一、 概述 群载波主机是专为山洪灾害预警、气象预警、地质灾害预警设计的一款智能IP群载波主机。该群载波主机可通过网络实现与控制中心通讯&#xff0c;用户可实时远程控制功放的开关机状态以及检测设备的主要信息。群载波主机主要用于接收网络信号&#xff0c;与控制中心通讯…

如何在Ubuntu系统中添加硬盘

这里写自定义目录标题 一. 安装磁盘二. 查看和新建硬盘分区2.1 查看硬盘分区2.2 创建硬盘分区 三. 分区格式化四. 分区挂载到目录五. 配置启动挂载 众所周知&#xff0c;在Linux系统中有一个著名的说法&#xff0c;即”一切皆文件“。包括磁盘在内的各种连接到系统的设备都用文…

视频怎么实现倒放?分享这3个方法给大家!

如果你曾经想过将自己喜欢的视频倒放播放&#xff0c;你可能会发现这是一项相当具有挑战性的任务。尽管许多视频播放器提供了倒放功能&#xff0c;但有时候这些功能可能不够灵活&#xff0c;甚至根本不支持倒放。在本文中&#xff0c;我们将介绍几种可帮助你倒放视频的方法。 …

减噪 低振纹|拓尔微TMI8421打印机马达驱动解决方案

打印机作为现代办公不可或缺的设备为我们的工作带来了便利&#xff0c;但也会遇到一些”鸡肋“问题&#xff0c;如产生噪音或机器发热等问题&#xff0c;不仅无法高效的打印文件资料还会给安静的办公室环境带来噪音干扰&#xff0c;打乱工作思绪...... 一台高效稳定且减噪的打…

langchain源码阅读系列(三)之Chain模块

原文首发于博客文章langchain源码阅读 本节是langchian源码阅读系列第三篇&#xff0c;下面进入Chain模块&#x1f447;&#xff1a; LLM 应用构建实践笔记 Chain链定义 链定义为对组件的一系列调用&#xff0c;也可以包括其他链&#xff0c;这种在链中将组件组合在一起的想…

Python中读取与写入文件时的编码方式

在《Python中文件的读取》与《Python中文件的写入》中提到通过文件对象调用read()函数和write()函数实现文件的读写。以上方法能够正确地取或写入英文时&#xff0c;当要读写的内容是中文时&#xff0c;则需要考虑编码方式。 1 读取已经存在的数据 1.1 创建文件 创建一个txt…

【码银送书第二期】《高并发架构实战:从需求分析到系统设计》

很多软件工程师的职业规划是成为架构师&#xff0c;但是要成为架构师很多时候要求先有架构设计经验&#xff0c;而不做架构师又怎么会有架构设计经验呢&#xff1f;那么要如何获得架构设计经验呢&#xff1f; 一方面可以通过工作来学习&#xff0c;观察所在团队的架构师是如何…

nginx脚本,Nginx变量截取字符串,拼接字符串,nginx打印日志,添加修改HTTP请求头,添加修改HTTP响应头

nginx变量 nginx变量命名&#xff0c;以$开头。 举例&#xff1a;nginx.conf 文件中有下面这一行配置&#xff1a;set $var "hello world";特点&#xff1a;我们看到,Nginx 变量名前面有一个 $ 符号,这是语法上的要求强调&#xff1a;所有的 Nginx 变量在 Nginx 配…

热门实践丨如何结合实际业务进行 ECS 规格选型与容量验证

作者&#xff1a;赵佳佳 随着云原生技术的蓬勃发展以及云产品价格愈发低廉&#xff0c;越来越多 Geek 开发者、技术爱好者选择 OSS 对象存储、ECS 云服务器等基础产品构建自己的网站、网盘等应用。但对于企业而言&#xff0c;面对种类与规格的丰富的 ECS 云服务器&#xff0c;…

【网络原理之三】应用层协议HTTP和HTTPS

HTTP什么是HTTP工作过程协议格式协议内容HTTP请求MethodURLURL的encode和decode Version请求报头请求正文 HTTP响应状态码响应报头 HTTPSHTTPS执行过程加密对称加密非对称加密 证书 HTTP 什么是HTTP HTTP&#xff1a;超文本传输协议。是一种应用非常广泛的应该层协议。 所谓 “…

Mybatis应用(3)——mybatis框架使用 mybatis项目应用初步 mybatis使用报错集锦

目录 引出mybatis框架使用1.导包&#xff1a;mybatis包分页的包pom.xml文件【war包】1.导包&#xff1a;mybatis包分页的包pom.xml文件【jar包】2.resources下配置mybatis-config.xml文件&#xff0c;以及log4j.properties文件3.在resources下建文件4.在UserMapper中写SQL myba…

若依v3.2问题解决:菜单路由不匹配 / 跳转路由页面空白

问题1解决方法 问题2解决方法 问题1 菜单路由不匹配 &#xff0c;在菜单管理中匹配代码中的相应组件&#xff0c;可是在页面上总是报匹配错误&#xff0c;下面是报错情况和相关数据库 解决方法 因为店铺管理是一个目录&#xff0c;而店铺详情和店铺列表是菜单&#xff0c;路…

UC伯克利LLM排行榜(Chatbot Arena Leaderboard)再更新!GPT-4稳居第一,Vicuna-33B登顶开源模型第一

UC伯克利LLM排行榜&#xff08;Chatbot Arena Leaderboard&#xff09;再更新&#xff01;GPT-4稳居第一&#xff0c;Vicuna-33B登顶开源模型第一 文章目录 1. LMSYS ORG更新「LLM排位赛」2. 全新评价机制&#xff1a;MT-Bench2.1 为什么选择 MT-Bench&#xff1f;2.2 用LLM评…