1. 程式人生 > >No module named 'MySQLdb'

No module named 'MySQLdb'

python版本:3.6.5
Django版本:2.0.5 (進入python互動模式,import django ; print(django.VERSION) )

使用pycharm建立一個專案(study01)後,應用為app,在配置檔案中配置使用mysql資料庫後,啟動的時候報錯了,錯誤資訊如下:

    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'

錯誤資訊

在python3以上版本中,MySQLdb模組已經廢棄了,主要是pymysql模組連線資料庫,解決辦法:

在專案目錄和setting.py同級的目錄下的 __init__.py檔案中新增以下內容即可。

import pymysql
pymysql.install_as_MySQLdb()

在這裡插入圖片描述

擴充套件

1、在setting中配置django使用mysql資料庫

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'test',
        'USER': 'root',
        'PASSWORD':'password123',
        'PORT':3306,
        'HOST':'192.168.16.191',
        'CHARSET':'utf8',
    }
}

參考:https://docs.djangoproject.com/en/2.0/ref/settings/#databases

2、pip freeze 檢視 pymysql 版本

>>> import pymysql
>>> print(pymysql.__version__)

在這裡插入圖片描述

3、在開發過程中,由於資料庫表的重新設計,需要刪除原表,並通過Django的ORM功能重新同步表。
問題:從資料庫裡面刪除了表,後來再註釋了models中的類,重新同步,報錯
解決:

python manage.py makemigrations
python manage.py migrate --fake    #主要是 --fake 這個引數

4、靜態檔案配置

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'statics'),
)

5、admin的靜態檔案配置

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

同步admin靜態檔案命令
$ python admin.py collectstatic

備註: 在配置系統靜態檔案和admin靜態檔案的時候,兩個目錄不能一樣,否則會報錯

6、快取配置
請參考:https://blog.csdn.net/m0_37886429/article/details/78027164

7、django使用中文

在配置檔案settings.py中配置

#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans'   #desplay chinese
TIME_ZONE = 'Asia/Shanghai'

8、每一次呼叫query物件;顯示對應的sql語句

在配置檔案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',
        },
    }
}

9、django使用redis快取

在配置檔案settings.py中配置

CACHES = {
    'default': {
        'BACKEND': 'redis_cache.cache.RedisCache',
        'LOCATION': '127.0.0.1:6379',
        'db':14,
        "OPTIONS": {
            "CLIENT_CLASS": "redis_cache.client.DefaultClient",
        },
    },
}
REDIS_TIMEOUT=7*24*60*60
CUBES_REDIS_TIMEOUT=60*60
NEVER_REDIS_TIMEOUT=365*24*60*60

10、django中include用法

首先在和settings.py同級目錄的 urls.py 檔案中匯入 include 模組,並配置

from django.conf.urls import url,include
from django.contrib import admin
from articles import urls

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^article/', include('articles .urls')),
]

其次在 articles 應用中建立  urls.py 檔案,配置如下

#!/usr/bin/env python
#-*- coding:utf-8 -*-
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'home/$', views.home),
    url(r'index/([0-9]{4})/([0-9]{2})/([0-9]{2})/$', views.index),    #無命名url,用()表示,寫檢視函式的時候,有幾個括號,需要傳遞幾個引數
    url(r'test/(?P<year>[0-9]{4})/$', views.test),    #命名url,,寫檢視函式的時候,傳遞引數的名必須是year
    url(r'sign/$', views.sign,name='ssss'),    #給url起別名,在前端呼叫的時候通過模板語言格式呼叫 {% url 'ssss' %}
    url(r'login/$', views.login,{'name':'abc'}),    #給url傳遞引數,寫檢視函式的時候,用key作為引數;如果這個引數和有名字的url在一起用的時候,不要起相同的名字
]