01-配置数据库信息

文件:”E:Python_projectP_001myshoptestmyshopmyshopsettings.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_projectP_001myshoptestmyshopmyshopsettings.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_projectP_001myshoptestmyshopapp1models.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_projectP_001myshop-testmyshop
E:
manage.py makemigrations

上面的命令正常的话运行结果如下所示
在这里插入图片描述
打开文件:“E:Python_projectP_001myshoptestmyshopapp1migrations001_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_projectP_001myshop-testmyshop
E:
manage.py migrate

在这里插入图片描述

06-查看数据库

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

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

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

import os
import django

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

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

# 导入模型,注意必须在加载完Django的设置后下面的这句导入模型语句才能被正确执行
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

原文地址:https://blog.csdn.net/wenhao_ir/article/details/131558124

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_24732.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注