• VS2019 开发Django(三)------连接MySQL


    导航:VS2019开发Django系列

    下班回到家,洗漱完毕,夜已深。关于Django这个系列的博文,我心中的想法就是承接之前的微信小程序的内容,做一个服务端的管理中心,上新菜单,调整价格啊!之类的,有点想法,才能完成一系列的学习,要不然漫无目的,也不知道坚持的意义。

    上一篇,我们已经完成了第一个Django的app hello world,这篇我们的主题内容是连接MySql数据库,因为工作当中使用的是MySql的数据库,且我自己也有这个环境,那么就直接考虑使用MySql数据库了。关于MySql服务的安装,就不在这里描述了,咱们直奔主题。

    1)修改配置时区与语言代码,找到setting.py文件,修改里边的语言代码为:zh-Hans,修改时区为:Asia/Shanghai

    # Internationalization
    # https://docs.djangoproject.com/en/2.1/topics/i18n/
    LANGUAGE_CODE = 'zh-Hans'
    TIME_ZONE = 'Asia/Shanghai'
    USE_I18N = True
    USE_L10N = True
    USE_TZ = True

    2)修改数据库的配置, 官方文档中提共了如下4种数据库引擎,剩下的配置就是你的数据库的连接信息,信息配置完成之后,一定要在MySql中新建数据库DjangoLazyOrders

    'django.db.backends.postgresql'
    'django.db.backends.mysql'
    'django.db.backends.sqlite3'
    'django.db.backends.oracle'

    # Database
    # https://docs.djangoproject.com/en/2.1/ref/settings/#databases
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'DjangoLazyOrders',
            'USER': 'test',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': '10080',
        }
    }

    3)安装pymysql,类似于.Net中使用的MySql.Data.dll,这么理解就行了。首先cmd切换到项目的虚拟环境下的Scripts文件夹下(D:项目localDjangoLazyOrdersenvScripts),然后输入如下命令,回车,等待安装完成,安装完成后,我们能看到我们的安装的版本为0.9.3,这是目前最新的版本。批注:一定要先切换到虚拟环境下再安装

    pip install pymysql

     4)添加models,如下实体拷贝自官方文档,其中__str__函数,类似于C#中重写ToString()方法,添加完了模型之后,一定要将我们的app注册到INSTALLED_APPS中,上一篇有提到。

    from django.db import models
    
    # Create your models here.
    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
        def __str__(self):
            return self.question_text
    
    
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)
        def __str__(self):
            return self.choice_text

    5)数据迁移,如下图,选择Django进行迁移,直接异常了ModuleNotFoundError: No module named 'MySQLdb'找不到MySQLdb这个模块,要怎么解决这个问题呢?

     打开__init__.py(hello)文件,将如下代码贴进去,再次进行迁移,上一个问题解决了,但是马上抛出了新的异常:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.配置要求使用1.3.13或者更新的版本,而你正在使用的是0.9.3的版本,要怎么解决这个问题呢?看错误提示中提到了一个文件D:项目localDjangoLazyOrdersenvlibsite-packagesdjangodbackendsmysqlase.py,打开这个文件,直接搜索1.3.13定位到代码块,注释对版本校验的代码即可。

    import pymysql
    pymysql.install_as_MySQLdb()

     接下来再次尝试进行迁移,WTF,再次异常:AttributeError: 'str' object has no attribute 'decode',没办法,只能再次根据提示找到D:项目localDjangoLazyOrdersenvlibsite-packagesdjangodbackendsmysqloperations.py文件,直接搜索errors='replace',定位到代码块,然后注释掉下图中的两行代码

     再次尝试进行迁移,终于没有异常了,然后选择迁移,终于,终于,成功了。

    正在执行 manage.py makemigrations
    No changes detected
    正在执行 manage.py migrate
    Operations to perform:
      Apply all migrations: admin, auth, contenttypes, hello, 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 auth.0010_alter_group_name_max_length... OK
      Applying auth.0011_update_proxy_permissions... OK
      Applying hello.0001_initial... OK
      Applying sessions.0001_initial... OK
    >>> 

    然后我们去数据库中查看,数据库迁移成功,我们添加的实体,分别对应表hello_choice,hello_question

    6)总结

    • 该篇主要介绍了怎么在Django中配置连接MySql数据
    • 完成了Code First的数据迁移

    困了....待续....

  • 相关阅读:
    Codeforces 46D Parking Lot
    矩阵快速幂
    Codeforces 295A Greg and Array
    hihocoder 1154 Spring Outing
    51NOD 1400 序列分解
    最短路之Dijkstra算法
    连通性1 求无向图的low值
    用数组实现临接表
    hihocoder 1181 欧拉路.二
    TCP多线程聊天室
  • 原文地址:https://www.cnblogs.com/dwBurning/p/Django3.html
Copyright © 2020-2023  润新知