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:\項目\local\DjangoLazyOrders\env\Scripts),然后輸入如下命令,回車,等待安裝完成,安裝完成后,我們能看到我們的安裝的版本為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:\項目\local\DjangoLazyOrders\env\lib\site-packages\django\db\backends\mysql\base.py,打開這個文件,直接搜索1.3.13定位到代碼塊,注釋對版本校驗的代碼即可。

import pymysql
pymysql.install_as_MySQLdb()

 接下來再次嘗試進行遷移,WTF,再次異常:AttributeError: 'str' object has no attribute 'decode',沒辦法,只能再次根據提示找到D:\項目\local\DjangoLazyOrders\env\lib\site-packages\django\db\backends\mysql\operations.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的數據遷移

困了....待續....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM