日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

django连接mysql数据库_Django学习笔记(4)——Django连接数据库

發布時間:2023/12/8 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django连接mysql数据库_Django学习笔记(4)——Django连接数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在MVC或者MTV設計模式中,模型(M)代表對數據庫的操作。那么如何操作數據庫呢?本小節就認真學習一下。首先復習一下Django的整個實現流程 ,然后再實現一下使用數據庫的整個流程,最后學習一下連接數據庫需要了解的知識。

但是這里想詳細的進行學習,首先對Django 一些基本的知識點進行了解。

1,Django的流程實現

django

#安裝: pip3 install django

添加環境變量

#1 創建project

django-admin startproject mysite

---mysite

---settings.py

---url.py

---wsgi.py

---- manage.py(啟動文件)

#2 創建APP

python mannage.py startapp app01

#3 settings配置

TEMPLATES

STATICFILES_DIRS=(

os.path.join(BASE_DIR,"template"),

)

STATIC_URL = '/static/'

# 我們只能用 STATIC_URL,但STATIC_URL會按著你的 STATICFILES_DIRS去找

#4 根據需求設計代碼

url.py

view.py

#5 使用模版

render(req,"index.html")

#6 啟動項目

python manage.py runserver 127.0.0.1:8090

#7 連接數據庫,操作數據

model.py

2,代碼填充

根據需求,我們先完成主程序(也就是mysite/urls.py)的內容:

from mysql01 import views

# admin 后臺的路由,先注釋掉

urlpatterns = [

path('admin/', admin.site.urls),

# 你的路由,重點是引號中的正則表達式和后面的業務邏輯函數

path('index/',views.index),

# url(r'index/',views.index),

]

注意:關于django.urls path 和django.conf.urls url 的區別,django中 url 和 path 都是配置路徑,有什么不同呢?

path 和 url 是兩個不同的模塊,效果都是響應返回頁面,path調用的是python第三方模塊或者框架,而url則是自定義的模塊。

當然,主要問題在于版本:? 1.x版本用url? ?2.x 版本用path

再填充我們APP的views

from django.shortcuts import render

# Create your views here.

def index(req):

return render(req,'index.html')

完成自己寫的index.html文件(隨便寫的,內容如下)

test

hello world

用戶輸入

當你寫入一個HTML文件在templates中,為了讓Django知道我們的HTML文件在哪里,需要修改settings文件的相應內容,但是默認情況下,他正好使用,無需修改,除非特殊情況。

TEMPLATES = [

{

'BACKEND': 'django.template.backends.django.DjangoTemplates',

# 要是有這一行,如果已經存在請保持原樣

'DIRS': [os.path.join(BASE_DIR, 'templates')]

,

'APP_DIRS': True,

'OPTIONS': {

'context_processors': [

'django.template.context_processors.debug',

'django.template.context_processors.request',

'django.contrib.auth.context_processors.auth',

'django.contrib.messages.context_processors.messages',

],

},

},

]

3,運行程式

直接輸出下面代碼即可運行Django:

python manage.py runserver

在瀏覽器輸入下面代碼即可顯示index.html內容:

127.0.0.1:8000/index

一,使用Django自帶的sqlite3數據庫

Django通過自帶的ORM框架可以操作數據庫,并且自帶輕量級的sqlite3數據庫,Django默認使用SQLite數據庫,因為Python源生支持SQLite數據庫,所以我們無需安裝任何程式,就可以直接使用,下面我們先練習一下。

1.1? 在settings中,配置數據庫相關參數

因為是自帶的sqlite,所以無需修改,這里我們看一下:

# Database

# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {

'default': {

# 這里可以指定使用的數據庫類型,例如mysql

'ENGINE': 'django.db.backends.sqlite3',

'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

}

}

1.2 編譯models.py

Django通過自定義python類的形式來定義具體的模型,每個模型的物理存在方式就是一個python的Class,每個模型代表數據庫中的一張表,每個類的實例代表數據庫中的一行數據,類中的每個變量代表數據庫中的一列字段。

Django通過模型,將python代碼和數據庫操作結合起來,實現對SQL查詢語言的封裝。也就是說,你可以不會管理數據庫,可以不會SQL語言,你同樣能通過python的代碼進行數據庫的操作。DJango通過ORM對數據庫進行操作,下面直接看代碼:

from django.db import models

# Create your models here.

class UserInfo(models.Model):

'''

創建兩個字段,最大長度是32,類型是char

'''

user = models.CharField(max_length= 32)

pwd = models.CharField(max_length= 32)

這里我們創建了兩個字段,分別保存用戶的名稱和密碼。

上面的代碼,相當于下面的原生SQL語句。

CREATE TABLE UserInfo (

"id" serial NOT NULL PRIMARY KEY,

"user" varchar(30) NOT NULL,

"pwd" varchar(30) NOT NULL

);

注意:

Django默認自動創建自增主鍵ID,當然也可以自己指定主鍵。

上面的SQL語法基于PostgreSQL

更多字段和參數

每個字段有一些特有的參數,例如,CharField 需要 max_length 參數來指定VARCHAR 數據庫字段的大小。還有一些適用于所有字段的通用參數。這些參數在文檔中有詳細定義,這里我們學習一下最常用的:

<1> CharField

字符串字段, 用于較短的字符串.

CharField 要求必須有一個參數 maxlength, 用于從數據庫層和Django校驗層

限制該字段所允許的最大字符數.

<2> IntegerField

#用于保存一個整數.

<3> FloatField

一個浮點數. 必須 提供兩個參數:

參數 描述

max_digits 總位數(不包括小數點和符號)

decimal_places 小數位數

舉例來說, 要保存最大值為 999 (小數點后保存2位),你要這樣定義字段:

models.FloatField(..., max_digits=5, decimal_places=2)

要保存最大值一百萬(小數點后保存10位)的話,你要這樣定義:

models.FloatField(..., max_digits=19, decimal_places=10)

admin 用一個文本框()表示該字段保存的數據.

<4> AutoField

一個 IntegerField, 添加記錄時它會自動增長. 你通常不需要直接使用這個字段;

自定義一個主鍵:my_id=models.AutoField(primary_key=True)

如果你不指定主鍵的話,系統會自動添加一個主鍵字段到你的 model.

<5> BooleanField

A true/false field. admin 用 checkbox 來表示此類字段.

<6> TextField

一個容量很大的文本字段.

admin 用一個 (文本區域)表示該字段數據.(一個多行編輯框).

<7> EmailField

一個帶有檢查Email合法性的 CharField,不接受 maxlength 參數.

<8> DateField

一個日期字段. 共有下列額外的可選參數:

Argument 描述

auto_now 當對象被保存時,自動將該字段的值設置為當前時間.通常用于表

示 "last-modified" 時間戳.

auto_now_add 當對象首次被創建時,自動將該字段的值設置為當前時間.

通常用于表示對象創建時間.

(僅僅在admin中有意義...)

<9> DateTimeField

一個日期時間字段. 類似 DateField 支持同樣的附加選項.

<10> ImageField

類似 FileField, 不過要校驗上傳對象是否是一個合法圖片.#它有兩個可選參

數:height_field和width_field,

如果提供這兩個參數,則圖片將按提供的高度和寬度規格保存.

<11> FileField

一個文件上傳字段.

要求一個必須有的參數: upload_to, 一個用于保存上載文件的本地文件系統路徑.

這個路徑必須包含 strftime #formatting,

該格式將被上載文件的 date/time

替換(so that uploaded files don't fill up the given directory).

admin 用一個部件表示該字段保存的數據(一個文件上傳部件) .

注意:在一個 model 中使用 FileField 或 ImageField 需要以下步驟:

(1)在你的 settings 文件中, 定義一個完整路徑給 MEDIA_ROOT 以便讓

Django在此處保存上傳文件.

(出于性能考慮,這些文件并不保存到數據庫.) 定義MEDIA_URL 作為該目錄

的公共 URL. 要確保該目錄對

WEB服務器用戶帳號是可寫的.

(2) 在你的 model 中添加 FileField 或 ImageField, 并確保定義了

upload_to 選項,以告訴 Django

使用 MEDIA_ROOT 的哪個子目錄保存上傳文件.你的數據庫中要保存的只是

文件的路徑(相對于 MEDIA_ROOT).

出于習慣你一定很想使用 Django 提供的 get__url 函數.舉

例來說,如果你的 ImageField

叫作 mug_shot, 你就可以在模板中以 {{ object.#get_mug_shot_url }}

這樣的方式得到圖像的絕對路徑.

<12> URLField

用于保存 URL. 若 verify_exists 參數為 True (默認), 給定的 URL 會預先檢查是否

存在( 即URL是否被有效裝入且

沒有返回404響應).

admin 用一個 文本框表示該字段保存的數據(一個單行編輯框)

<13> NullBooleanField

類似 BooleanField, 不過允許 NULL 作為其中一個選項. 推薦使用這個字段而不要用

BooleanField 加 null=True 選項

admin 用一個選擇框 (三個可選擇的值: "Unknown", "Yes" 和 "No" )

來表示這種字段數據.

<14> SlugField

"Slug" 是一個報紙術語. slug 是某個東西的小小標記(短簽), 只包含字母,數字,下劃線

和連字符.#它們通常用于URLs

若你使用 Django 開發版本,你可以指定 maxlength. 若 maxlength 未指定, Django

會使用默認長度: 50. #在

以前的 Django 版本,沒有任何辦法改變50 這個長度.

這暗示了 db_index=True.

它接受一個額外的參數: prepopulate_from, which is a list of fields from which to auto-#populate

the slug, via JavaScript,in the object's admin form: models.SlugField

(prepopulate_from=("pre_name", "name"))prepopulate_from 不接受 DateTimeFields.

<13> XMLField

一個校驗值是否為合法XML的 TextField,必須提供參數: schema_path, 它是一個

用來校驗文本的 RelaxNG schema #的文件系統路徑.

<14> FilePathField

可選項目為某個特定目錄下的文件名. 支持三個特殊的參數, 其中第一個是必須提供的.

參數 描述

path 必需參數. 一個目錄的絕對文件系統路徑. FilePathField 據此得到可選項目.

Example: "/home/images".

match 可選參數. 一個正則表達式, 作為一個字符串, FilePathField 將使用它過濾文件名.

注意這個正則表達式只會應用到 base filename 而不是

路徑全名. Example: "foo.*\.txt^", 將匹配文件 foo23.txt 卻不匹配 bar.txt 或 foo23.gif.

recursive可選參數.要么 True 要么 False. 默認值是 False. 是否包括 path 下面的全部子目錄.

這三個參數可以同時使用.

match 僅應用于 base filename, 而不是路徑全名. 那么,這個例子:

FilePathField(path="/home/images", match="foo.*", recursive=True)

...會匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif

<15> IPAddressField

一個字符串形式的 IP 地址, (i.e. "24.124.1.30").

<16> CommaSeparatedIntegerField

用于存放逗號分隔的整數值. 類似 CharField, 必須要有maxlength參數.

更多參數

(1)null

如果為True,Django 將用NULL 來在數據庫中存儲空值。 默認值是 False.

(1)blank

如果為True,該字段允許不填。默認為False。

要注意,這與 null 不同。null純粹是數據庫范疇的,而 blank 是數據驗證范疇的。

如果一個字段的blank=True,表單的驗證將允許該字段是空值。如果字段的blank=False,該字段就是必填的。

(2)default

字段的默認值。可以是一個值或者可調用對象。如果可調用 ,每有新對象被創建它都會被調用。

(3)primary_key

如果為True,那么這個字段就是模型的主鍵。如果你沒有指定任何一個字段的primary_key=True,

Django 就會自動添加一個IntegerField字段做為主鍵,所以除非你想覆蓋默認的主鍵行為,

否則沒必要設置任何一個字段的primary_key=True。

(4)unique

如果該值設置為 True, 這個數據字段的值在整張表中必須是唯一的

(5)choices

由二元組組成的一個可迭代對象(例如,列表或元組),用來給字段提供選擇項。

如果設置了choices ,默認的表單將是一個選擇框而不是標準的文本框,而且這

個選擇框的選項就是choices 中的選項。

1.3? 在終端創建表

我們需要在pycharm的teminal中通過命令創建數據庫的表,有兩條命令,分別是:

生成同步數據庫的腳本代碼

python manage.py makemigrations

通過運行makemigrations 命令,相當于告訴Django,你對模型有改動,并且你想把這些改動保存為一個“遷移”(migration)。

運行后,結果如下:

Migrations for 'mysql01':

mysql01\migrations\0001_initial.py

- Create model UserInfo

migrations是Django保存模型修改記錄的文件,這些文件保存在磁盤上,從上面可以看到,它就是??mysql01\migrations\0001_initial.py? 。我們可以打開這個文件看一下,里面保存的都是可讀并且可編譯的內容,方便我們隨時手動修改。

下面看一下0001_initial.py內容:

# Generated by Django 2.1.7 on 2019-03-12 01:45

from django.db import migrations, models

class Migration(migrations.Migration):

initial = True

dependencies = [

]

operations = [

migrations.CreateModel(

name='UserInfo',

fields=[

('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),

('user', models.CharField(max_length=32)),

('pwd', models.CharField(max_length=32)),

],

),

]

同步數據庫(也就是對數據庫執行真正的遷移動作)腳本代碼

python manage.py migrate

migrate命令對所有還未實施的遷移記錄進行操作,本質上就是將你對模型的修改體現到數據庫中具體的表上面。Django通過一張叫做django_migrations的表,記錄并跟蹤已經實施的migrate動作,通過對比獲得哪些migrations尚未提交。

運行后,結果如下:

Operations to perform:

Apply all migrations: admin, auth, contenttypes, mysql01, sessions

Running migrations:

Applying mysql01.0001_initial... OK

注意:在開發過程中,數據庫同步誤操作之后,難免會遇到后面不能同步成功的情況,解決這個問題的一個簡單粗暴方法是把migrations目錄下的腳本(除__init__.py之外)全部刪掉,再把數據庫刪掉之后創建一個新的數據庫,數據庫同步操作再重新做一遍。

所以我們需要為進入這個項目的后臺創建超級管理員:

python manage.py createsuperuser

設置好用戶名和密碼后便可登錄啦!

二,使用MySQL數據庫

下面學習MySQL數據庫連接Django。

1,打開MySQL命令對話框,創建表

create database djangomysql default charset=utf8;

在使用非SQLite的數據庫時候,請務必預先在數據庫管理系統的提示符交互模式下創建數據庫,我們可以使用命令:“CREATE DATABASE database_name;”。Django不會自動幫你做這一步工作。

2,創建一個APP

python manage.py startapp mysql02

3,修改Django中settings.py的相關參數,配置MySQL

添加mysql02這個APP

INSTALLED_APPS = [

'django.contrib.admin', #admin后臺管理站點

'django.contrib.auth', # 身份認證系統

'django.contrib.contenttypes', # 內容類型框架

'django.contrib.sessions', # 回話框架

'django.contrib.messages', # 消息框架

'django.contrib.staticfiles', # 靜態文件管理框架

'mysql02',

]

注釋SQLite,配置MySQL

DATABASES = {

'default': {

# 這里可以指定使用的數據庫類型,例如mysql

'ENGINE': 'django.db.backends.mysql',

'NAME': 'djangomysql',

'USER':'root',

'PASSWORD':'******',

'HOST':'localhost',

'PORT':'3306',

}

}

或者這樣寫:

# mysite/settings.py

# Database

# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

import pymysql # 一定要添加這兩行!通過pip install pymysql!

pymysql.install_as_MySQLdb()

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'mysite',

'HOST': '192.168.1.1',

'USER': 'root',

'PASSWORD': 'pwd',

'PORT': '3306',

}

}

4,安裝MySQL-python

必須先按照MySQLdb,不然會報如下的錯誤:

ModuleNotFoundError: No module named 'MySQLdb'

Django連接mysql默認驅動是MySQLdb,MySQLdb沒有支持python3的版本,如果使用python3.x版本的時候,Django連接mysql的方法是使用pymysql替換MySQLdb。

在配置文件同目錄下的__init__.py文件中加入以下代碼(本文就是mysite下的__init__.py):

import pymysql

pymysql.install_as_MySQLdb()

使用myslqclient代替MySQLdb,mysqlclient項目在github上的地址為 https://github.com/PyMySQL/mysqlclient-python,該項目fork MySQLdb,加入了對python3的支持。

安裝如下:

pip install pymysql

沒有提示MySQLdb模塊找不到,說明按照OK。

5,編譯models.py

Django通過自定義python類的形式定義具體的模型,每個模型代表數據庫中的一張表,每個類的實例代表數據表中的一行數據,類中的每個變量代表數據表中的一列字段。

from django.db import models

# Create your models here.

class Userinfo(models.Model):

'''

創建兩個字段,最大長度為32,類型是char

'''

user = models.CharField(max_length= 32)

pwd = models.CharField(max_length= 32)

6,在終端創建數據庫的表

我們需要先生成同步數據庫的腳本代碼:

python manage.py makemigrations

執行結果如下:

Migrations for 'mysql02':

mysql02\migrations\0001_initial.py

- Create model Userinfo

然后同步數據庫(也就是對數據庫執行真正的遷移動作)

python manage.py migrate

執行結果如下:

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions

Running migrations:

Applying contenttypes.0001_initial... OK

Applying auth.0001_initial... OK

Applying admin.0001_initial... OK

Applying admin.0002_logentry_remove_auto_add... OK

Applying admin.0003_logentry_add_action_flag_choices... OK

Applying contenttypes.0002_remove_content_type_name... OK

Applying auth.0002_alter_permission_name_max_length... OK

Applying auth.0003_alter_user_email_max_length... OK

Applying auth.0004_alter_user_username_opts... OK

Applying auth.0005_alter_user_last_login_null... OK

Applying auth.0006_require_contenttypes_0002... OK

Applying auth.0007_alter_validators_add_error_messages... OK

Applying auth.0008_alter_user_username_max_length... OK

Applying auth.0009_alter_user_last_name_max_length... OK

Applying sessions.0001_initial... OK

7,查看mysql數據庫

在MySQL中,進入創建的庫中,查看我們在Django創建的表:

三,在pycharm上操作MySQL

pycharm可以創建,讀寫數據庫,不過如果想與工程相連,還是需要在工程中用代碼鏈接,單擊Database側邊欄位。添加Database,如下圖:

點擊“+”,然后點擊Data Sources,進入設置界面。如下:

然后填寫連接信息,Database欄可以填寫具體數據庫名稱,不填寫則加載所有數據庫。第一次使用PyCharm時會提示設置操作木馬,填寫完成后可以點擊“Test? Connection”,測試連接情況,沒有問題,點擊OK,輸入操作木馬即可完成連接。

注意:這里必須注意下載missing dirver files。

右側為MySQL目錄,如果修改,查看沒有找到自己的數據庫,點擊“more schemes”,如圖:

可以在命令行直接操作數據庫,如圖:

結果如下:

雙擊table1,可以圖形化顯示數據表:

顯示結果如下:

四,python操作MySQL

在Python環境下的操作,我們必然是通過寫Python代碼的方式。但是Python和數據庫語言SQL是兩碼事,它根本無法操作數據庫,沒關系,我們可以在Python代碼中嵌入SQL語句,比如下面的方式:

# 創建連接,這里先忽略創建方法

conn = ......

# 創建游標

cursor = conn.cursor()

# 執行SQL,并返回收影響行數

effect_row = cursor.execute("insert into host (hostname,port,ip) values('ubuntu','22','10.0.0.2');")

# 提交,不然無法保存新建或者修改的數據

conn.commit()

# 關閉游標

cursor.close()

# 關閉連接

conn.close()

所以問題來了,python如何創建和數據庫的鏈接呢?這里我們使用pymysql這一類的第三方模塊(針對不同的數據庫,有不同的模塊),于是我們有下面的鏈接:

conn = pymysql.connect(host='137.78.5.130', port=3306, user='root',

passwd='123456', db='test')

大多數程序員不是專業的DBA,所以SQL寫的很爛也正常,那么出錯問題如何解決呢?

Python語法可以解決這個問題,我們使用Python語法來寫,然后使用一個中間工具將Python代碼翻譯成原生的SQL語句,而這個中間工具就是所謂的ORM(對象關系映射)!

ORM將一個Python的對象映射為數據庫中的一張關系表。它將SQL封裝起來,程序員不再需要關心數據庫的具體操作,只需要專注于自己本身的代碼和業務邏輯的實現。

于是整體的流程就是:Python代碼,通過ORM轉換成SQL語句,再通過pymysql去實際操作數據庫。

Django自帶ORM系統,不需要額外的安裝別的ORM。當然也可以安裝并使用其他的ORM,比如SQLAlchemy。但是不建議這么做,因為Django系統龐大,集成完善,模型層與視圖層,模板層結合的比較緊密。

五,django.db.utils.ProgrammingError: (1146, u"Table'' doesn't exist")解決辦法

5.1? 現象

在數據庫中刪除了一張表,重新執行python? manage.py migrate 時報錯,提示不存在這張表

5.2? 原因

主要是因為Django一般在第一次遷移的時候新建表,后面都不會新建表,而是只檢查字段等等的變化,所以我們既然已經刪除了這張表,django檢查這張表的字段變化的時候自然報錯了。

5.3? 解決方法

解決方法仍然是執行數據庫遷移命令

python manage.py makemigrations

python manage.py migrate

只不過在執行上面代碼之前,把第一次執行遷移創建的那個記錄刪除掉,否則它檢查到已經執行過第一次了,那么它后面就不會創建表了。

在該APP模塊下,有一個migtations文件夾,除了前兩個文件外,其他的文件都刪除,其實每一次如果有變化的話,這邊就會生成一個文件,下面的這個001_initial.py看名字就知道是第一次遷移的時候生成的,也就是因為有它的存在,所以以后每次再執行就不再創建表了。

其次,在數據庫里面也有相應的記錄,也要刪除。我們仔細看看數據庫里面存的是什么,在Django_migrations里面,這表里面存的都是每次遷移的記錄,當然記錄的是什么模塊以及對應的文件名字,比如我們這里的模塊是dtheme,這里的文件名叫做001_initial,和我們文件夾里面是一一對應的,同樣,刪除這條記錄。

然后在執行數據庫遷移命令即可。

注意:如果這個APP模塊下面還有其他的model的話,那么其他的model創建的表也要刪除掉,相當于我們這樣的解決方案是針對整個APP模塊的,要執行就會全部重新生成,不然會提示部分表已經存在錯誤。

六,其他django命令行操作命令

1,清空數據庫

python manage.py flush

2,查詢某個命令的詳細信息

django-admin.py help startapp

admin?是Django?自帶的一個后臺數據庫管理系統。

此時會進入django-admin的內容區:

#!c:\programdata\anaconda3\python.exe

from django.core import management

if __name__ == "__main__":

management.execute_from_command_line()

3,啟動交互界面

python manage.py shell

這個命令和直接運行 python 進入 shell 的區別是:你可以在這個 shell 里面調用當前項目的 models.py 中的 API,對于操作數據,還有一些小測試非常方便。

4,忘記命令時,可以這樣操作

終端上輸入python?manage.py?可以看到詳細的列表,在忘記子名稱的時候特別有用。

Type 'manage.py help ' for help on a specific subcommand.

Available subcommands:

[auth]

changepassword

createsuperuser

[contenttypes]

remove_stale_contenttypes

[django]

check

compilemessages

createcachetable

dbshell

diffsettings

dumpdata

flush

inspectdb

loaddata

makemessages

makemigrations

migrate

sendtestemail

shell

showmigrations

sqlflush

sqlmigrate

sqlsequencereset

squashmigrations

startapp

startproject

test

testserver

[sessions]

clearsessions

[staticfiles]

collectstatic

findstatic

runserver

5,修改語言

在主程序的settings.py里面查找語言編碼,默認是英文的,這里可以修改為中文,此處修改針對的是admin的頁面。

LANGUAGE_CODE = 'en-us'# 默認

LANGUAGE_CODE = 'zh-hans'# 改為中文,主要針對admin頁面

6,配置模板路徑

在項目根目錄下添加templates文件夾。

TEMPLATE_DIRS = (

os.path.join(BASE_DIR,'templates'),

)

#然后在項目根目錄下添加templates文件夾

六,報錯出現django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.2

1,問題描述

使用Python3.6+django2.2+pymysql的時候出現這個問題:

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.2

據了解,這主要是django2.2內部的一個版本限制在作怪。

2,處理方案

修復源碼,因為django2.2和pymysql版本不匹配,所以mysqldb不支持python3.。那么我們可以注銷掉下面這句話。

if version < (1, 3, 13):

raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.’ %Database.version)

這段話一般在Python的下面目錄:C:\Python37\Lib\site-packages\django\db\backends\mysql(python安裝目錄)打開base.py,注釋掉。

然后在C:\Python37\lib\site-packages\django\db\backends\mysql\operations.py 的146行將下面代碼的decode修改為encode。

因為字符串沒有decode。

query = query.decode(errors=‘replace’)

參考文獻:https://blog.csdn.net/weixin_45476498/article/details/100098297

總結

以上是生活随笔為你收集整理的django连接mysql数据库_Django学习笔记(4)——Django连接数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。