01-配置數(shù)據(jù)庫信息
在文件:"E:\Python_project\P_001\myshop-test\myshop\myshop\settings.py"中寫入以下數(shù)據(jù)庫的配置信息:
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'
是一個數(shù)據(jù)庫后端引擎的路徑,用于指定使用MySQL作為數(shù)據(jù)庫的后端。數(shù)據(jù)庫后端引擎是Django用于與不同類型的數(shù)據(jù)庫進(jìn)行交互的組件。它提供了對數(shù)據(jù)庫的連接、查詢和數(shù)據(jù)操作的支持。
Django支持多個數(shù)據(jù)庫后端引擎,例如MySQL、PostgreSQL、SQLite等。通過設(shè)置'ENGINE'
選項,你可以指定使用的具體后端引擎。在這個例子中,'django.db.backends.mysql'
表示使用MySQL作為數(shù)據(jù)庫后端引擎。
通過選擇不同的后端引擎,你可以使用不同類型的數(shù)據(jù)庫來存儲和檢索數(shù)據(jù),而Django提供的ORM(對象關(guān)系映射)功能將為你提供一致的數(shù)據(jù)訪問接口,無論使用的是哪種數(shù)據(jù)庫后端引擎。這樣,你可以方便地切換和管理不同類型的數(shù)據(jù)庫,而無需更改大量的代碼。
在上面的配置中還取消了外鍵約束,否則在“多對多”模型關(guān)系的遷移中會出現(xiàn)下面的提示:
django.db.utils.IntegrityError:(1215, 'Cannot add foreign key constraint')
如果需要配置輸出對應(yīng)的數(shù)據(jù)庫語句(*),則需要在"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'
是一個布爾值選項,用于指定是否禁用現(xiàn)有的日志記錄器。它的作用是控制是否保留已經(jīng)存在的日志記錄器,而不是完全替換它們。
當(dāng)'disable_existing_loggers'
設(shè)置為True
時,將禁用現(xiàn)有的日志記錄器。這意味著,在日志配置中定義的新的日志記錄器會生效,而現(xiàn)有的日志記錄器將被忽略。這通常用于完全替換默認(rèn)的Django日志配置。
當(dāng)'disable_existing_loggers'
設(shè)置為False
時,保留現(xiàn)有的日志記錄器。這意味著,新的日志記錄器將與現(xiàn)有的記錄器一起使用,不會替換它們。這通常用于擴(kuò)展默認(rèn)的Django日志配置,添加額外的日志記錄器或修改現(xiàn)有記錄器的行為。
在給定的配置語句中,'disable_existing_loggers': False
表示不禁用現(xiàn)有的日志記錄器,而是保留它們,并將新的日志記錄器添加到現(xiàn)有的記錄器集合中。這樣可以確保現(xiàn)有的Django數(shù)據(jù)庫后端日志記錄器仍然有效,并將日志輸出發(fā)送到控制臺。
語句: ‘propagate’: True, 是什么意思?
答:在Django的日志配置中,'propagate'
是一個布爾值選項,用于指定日志消息是否應(yīng)該傳播給更高級別的日志記錄器。
當(dāng)'propagate'
設(shè)置為True
時,日志消息將傳播給父級日志記錄器。這意味著,如果當(dāng)前的日志記錄器無法處理日志消息,它將將消息傳遞給其父級記錄器,以便其處理或傳遞給更高級別的記錄器。傳播使得日志消息可以在整個日志記錄器層次結(jié)構(gòu)中進(jìn)行傳遞和處理。
當(dāng)'propagate'
設(shè)置為False
時,日志消息不會傳播給父級日志記錄器。如果當(dāng)前的日志記錄器無法處理日志消息,消息將被靜默丟棄,不會傳遞給更高級別的記錄器。
在給定的配置語句中,'propagate': True
表示日志消息將傳播給父級記錄器。這意味著,如果'django.db.backends'
記錄器無法處理日志消息,它將傳遞給更高級別的記錄器進(jìn)行處理。通過設(shè)置為True
,你可以確保數(shù)據(jù)庫后端日志消息在整個日志記錄器層次結(jié)構(gòu)中傳播,以便根據(jù)需要進(jìn)行處理或記錄。
02-安裝Python的MySQL數(shù)據(jù)庫驅(qū)動程序 mysqlclient
安裝命令如下(安裝前注意把代理工具關(guān)掉 ):
pip install -i https://mirrors.aliyun.com/pypi/simple mysqlclient
安裝成功后如下圖所示:
03-安裝Mysql,并啟動Mysql
在這里,可以用小皮面板來安裝Mysql,當(dāng)然也可以自己去Mysql的官網(wǎng)去下載安裝包安裝。
如果是用小皮面板來安裝Mysql,則可以參考我之前寫的博文:
https://blog.csdn.net/wenhao_ir/article/details/126170178
安裝好后啟動Mysql的服務(wù):
然后切換到數(shù)據(jù)庫,按第01步中的配置代碼中的信息新建一個數(shù)據(jù)庫:
04-定義Django的數(shù)據(jù)庫模型(定義數(shù)據(jù)表-編寫models.py文件)
在"“E:\Python_project\P_001\myshop-test\myshop\app1\models.py”"中寫入下面的內(nèi)容:
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-按照數(shù)據(jù)的配置生成數(shù)據(jù)庫(執(zhí)行遷移命令)
關(guān)于為什么在Django中把數(shù)據(jù)庫的生成稱為叫遷移?請參看我寫的另一篇博文,https://blog.csdn.net/wenhao_ir/article/details/131544152
05-01-生成遷移執(zhí)行文件
通過下面的幾條命令生成“遷移執(zhí)行文件”:
CD E:\Python_project\P_001\myshop-test\myshop\
E:
manage.py makemigrations
上面的命令正常的話運(yùn)行結(jié)果如下所示:
打開文件:“E:\Python_project\P_001\myshop-test\myshop\app1\migrations\0001_initial.py”
可以看到文件中包含當(dāng)前模型的創(chuàng)建語句,0001_initial.py的內(nèi)容如下:
# 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-執(zhí)行數(shù)據(jù)庫模型遷移
接上一步,用下面的三條語句實(shí)現(xiàn)執(zhí)行數(shù)據(jù)庫模型的遷移。
CD E:\Python_project\P_001\myshop-test\myshop\
E:
manage.py migrate
06-查看數(shù)據(jù)庫
可以用工具“opendbviewer”查看數(shù)據(jù)庫。
這個工具的百度網(wǎng)盤下載鏈接如下:
https://pan.baidu.com/s/19VxBiWHPmuJ_ApVgI3bqhA?pwd=e1te
安裝完成后,連接數(shù)據(jù)庫后就可以查看數(shù)據(jù)庫了~如下圖所示:
07-向數(shù)據(jù)庫寫入數(shù)據(jù)并查看數(shù)據(jù)
在路徑:E:\Python_project\P_001\myshop-test\myshop\下新建文件 sql_test.py(與manage.py平級):
然后寫入下面的代碼:
import os
import django
# 設(shè)置Dango運(yùn)行時需要的環(huán)境變量DJANGO_SETTINGS_MODULE
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')
# 加載Django的設(shè)置
django.setup()
# 導(dǎo)入模型,注意必須在加載完Django的設(shè)置后下面的這句導(dǎo)入模型語句才能被正確執(zhí)行
from app1.models import User
# 創(chuàng)建一個用戶
user = User(username='john', email='john@example.com')
user.save()
對于語句os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')
的解釋:
當(dāng)我們在Python中運(yùn)行Django項目時,需要告訴Django要使用的項目設(shè)置(settings)。這些設(shè)置包括數(shù)據(jù)庫配置、應(yīng)用程序列表、靜態(tài)文件路徑等等。
怎么告訴Django項目的設(shè)置(settings)呢?通過環(huán)境變量 DJANGO_SETTINGS_MODULE 告訴。
在這里,os.environ.setdefault(key, value)
是設(shè)置一個環(huán)境變量的方法。它接受兩個參數(shù):key
是要設(shè)置的環(huán)境變量的名稱,value
是要為該環(huán)境變量設(shè)置的值。'DJANGO_SETTINGS_MODULE'
剛才已經(jīng)說了它的作用,'myshop.settings'
是設(shè)置變量的值,表示Django應(yīng)該使用myshop
項目中的settings.py
文件作為項目的設(shè)置。
執(zhí)行上面的代碼即可向數(shù)據(jù)庫寫入數(shù)據(jù),執(zhí)行后我們再去看數(shù)據(jù)庫的記錄:
我們發(fā)現(xiàn),在數(shù)據(jù)庫shop-test的表User中已經(jīng)有了一條新的記錄。
我們再運(yùn)行下面的代碼,另外再寫入一條新的記錄:
import os
import django
# 設(shè)置Dango運(yùn)行時需要的環(huán)境變量DJANGO_SETTINGS_MODULE
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myshop.settings')
# 加載Django的設(shè)置
django.setup()
# 導(dǎo)入模型
from app1.models import User
# 創(chuàng)建一個用戶
user = User(username='suwenhao', email='2487872782.com')
user.save()
運(yùn)行完成后,數(shù)據(jù)庫中多新了一條新的記錄:文章來源:http://www.zghlxwxcb.cn/news/detail-528970.html
附完整代碼
https://pan.baidu.com/s/1mmNZyyV9lrmsTc0s1GvW1Q?pwd=i6g9 文章來源地址http://www.zghlxwxcb.cn/news/detail-528970.html
到了這里,關(guān)于Django的數(shù)據(jù)庫配置、生成(創(chuàng)建)過程、寫入數(shù)據(jù)、查看數(shù)據(jù)的學(xué)習(xí)過程記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!