No module named 'MySQLdb'

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37886429/article/details/83540314

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在一起用的时候,不要起相同的名字
]

猜你喜欢

转载自blog.csdn.net/m0_37886429/article/details/83540314