溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django中連接MySQL的方法

發(fā)布時(shí)間:2020-08-13 13:44:00 來(lái)源:億速云 閱讀:178 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹Django中連接MySQL的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

Django連接MySQL

1、創(chuàng)建數(shù)據(jù)庫(kù) (注意設(shè)置 數(shù)據(jù)的字符編碼)

由于Django自帶的orm是data_first類型的ORM,使用前必須先創(chuàng)建數(shù)據(jù)庫(kù)。

create database day70 default character set utf8 collate utf8_general_ci;

2、修改project中的settings.py文件中設(shè)置  連接 MySQL數(shù)據(jù)庫(kù)(Django默認(rèn)使用的是sqllite數(shù)據(jù)庫(kù))

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'day70',
    'USER': 'eric',
    'PASSWORD': '123123',
    'HOST': '192.168.182.128',
    'PORT': '3306',
    }
}

擴(kuò)展:查看orm操作執(zhí)行的原生SQL語(yǔ)句

在project中的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',
        },
    }
}

3、修改project 中的__init__py 文件設(shè)置 Django默認(rèn)連接MySQL的方式

import pymysql
pymysql.install_as_MySQLdb()

 4、setings文件注冊(cè)APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
   
]

5、models.py創(chuàng)建表

6、進(jìn)行數(shù)據(jù)遷移

在winds cmd或者Linux shell的項(xiàng)目的manage.py目錄下執(zhí)行

python manage.py makemigrations  #根據(jù)app下的migrations目錄中的記錄,檢測(cè)當(dāng)前model層代碼是否發(fā)生變化?
python manage.py migrate         #把orm代碼轉(zhuǎn)換成sql語(yǔ)句去數(shù)據(jù)庫(kù)執(zhí)行
python manage.py migrate --fake    #只記錄變化,不提交數(shù)據(jù)庫(kù)操作

Django中連接MySQL的方法

擴(kuò)展:修改表結(jié)構(gòu)之后常見(jiàn)報(bào)錯(cuò)

這個(gè)報(bào)錯(cuò):因?yàn)楸韯?chuàng)建之時(shí),新增字段既沒(méi)有設(shè)置默認(rèn)值,也沒(méi)有設(shè)置新增字段可為空,去對(duì)應(yīng)原有數(shù)據(jù)導(dǎo)致;

2種解決方法:

1.設(shè)置新增字段可以為空

    startdate = models.CharField(max_length=255, verbose_name="任務(wù)開(kāi)始時(shí)間",null=True, blank=True)
    Handledate = models.CharField(max_length=255, verbose_name="開(kāi)始處理時(shí)間",null=True, blank=True)
    Handledone = models.CharField(max_length=255, verbose_name="處理完畢時(shí)間", null=True, blank=True)
    enddate = models.CharField(max_length=255, verbose_name="任務(wù)結(jié)束時(shí)間",null=True, blank=True)
    WorkTime_cost=models.CharField(max_length=255,verbose_name='工作耗時(shí)',null=True, blank=True)

2.設(shè)置新增字段默認(rèn)值為當(dāng)前時(shí)間

Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now
Type 'exit' to exit this prompt
>>> timezone.now()

更多問(wèn)題

python manage.py makemigrations :把你寫(xiě)在models中的代碼翻譯成增、刪、改的 SQL 語(yǔ)句;

python manage.py migrate;講python manage.py makemigrations翻譯的SQL語(yǔ)句去數(shù)據(jù)庫(kù)執(zhí)行; 

python manage.py migrate --fake;假設(shè) migrate 把所有SQL語(yǔ)句執(zhí)行成功了;

我在使用Django構(gòu)建表結(jié)構(gòu)的時(shí)候很長(zhǎng)一段時(shí)間都是沒(méi)有了解以上3條語(yǔ)句的執(zhí)行意義,所有經(jīng)常在修改表結(jié)構(gòu)之后出現(xiàn)報(bào)錯(cuò);

出現(xiàn)報(bào)錯(cuò)的原因:

無(wú)非就是   makemigrations翻譯的 SQL,跟數(shù)據(jù)庫(kù)里面真實(shí)的表結(jié)構(gòu) 相互沖突,增加、刪除不了表、外鍵關(guān)系;

所以遇到報(bào)錯(cuò) 你應(yīng)該先把model中的代碼注釋掉-----》python manage.py migrate --fake------》python manage.py makemigrations

去數(shù)據(jù)庫(kù)把已經(jīng)存在的表、外鍵刪掉(確保數(shù)據(jù)庫(kù)目前的狀態(tài),可以讓makemigrations翻譯出來(lái)的SQL語(yǔ)句在數(shù)據(jù)庫(kù)里執(zhí)行成功;然后migrate)--------》 python manage.py migrate;

7.設(shè)置pycharm可視化MySQL

Django中連接MySQL的方法

Django中連接MySQL的方法

Django中連接MySQL的方法

以上是Django中連接MySQL的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI