ubuntu18.04 django 連接 mysql 資料庫方法和常見錯誤總結

2021-02-08 算法軟體開發活兒softwareWork

本人電腦系統 ubuntu18.04 , django版本 2.2

在ubuntu電腦使用django連接mysql資料庫的時候遇到了一些問題,總結下來分享給大家。

 

django自帶的資料庫是 sqlite ,如果想要換成 Mysql 資料庫需要做的有以下幾個步驟:

(1)創建一個 myql 資料庫

(2)在 settings.py 中把

DATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    }}

改成

DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME': 'HelloWorld_django',           'HOST': 'localhost',        'PORT': '3306',             'USER': 'root',              'PASSWORD': '...',       }}

(3)在和你新建的django項目同名的文件夾下的 __init__.py 文件中添加如下語句,如我的 django 項目名稱叫 helloworld,那麼就在helloworld/helloworld文件夾下的 __init__.py 中添加如下語句:

import pymysqlpymysql.install_as_MySQLdb()

(4)在你新建的 app 下的 models.py 文件中添加新建的資料庫欄位信息,如下所示:

class User(models.Model):    username = models.CharField(max_length=32)      password = models.CharField(max_length=32)  

(5)執行資料庫遷移的命令

python3 manage.py makemigrations 

python3 manage.py migrate

以上步驟執行完了之後如果沒有錯誤提示說明 django 已經成功連接上了 mysql 資料庫。

我在運行過程中遇到了許多錯誤,並且找到了比較好的解決方法,分享給大家

錯誤1 :django.db.utils.OperationalError: (1698, "Access denied for user 'root'@'localhost'")

解決方法:

mysql> USE mysql;mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';mysql> FLUSH PRIVILEGES;mysql> exit;

解決方法參考資料:https://stackoverflow.com/questions/41542045/mysql-django-db-utils-operationalerror-1698-access-denied-for-user-root

錯誤2:django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

解決方法:

mysql -u root -puse mysql;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword'; FLUSH PRIVILEGES;

解決方法參考資料:https://stackoverflow.com/questions/50652587/django-db-utils-operationalerror-1045access-denied-for-user-rootlocalhost

錯誤3:django AttributeError: 'str' object has no attribute 'decode'

解決方法:

出現這個錯誤之後可以根據錯誤提示找到文件位置,打開 operations.py 文件,找到以下代碼:

def last_executed_query(self, cursor, sql, params):                query = getattr(cursor, '_executed', None)    if query is not None:        query = query.decode(errors='replace')    return query

根據錯誤信息提示,說明 if 語句執行時出錯, query 是 str 類型,而 decode() 是用來將 bytes 轉換成 string 類型用的,由於 query 不需要解碼,所以直接將 if 語句注釋掉就可以了

def last_executed_query(self, cursor, sql, params):                query = getattr(cursor, '_executed', None)            return query

解決方法參考資料:https://www.cnblogs.com/dbf-/p/10838176.html

 

本人學習 django 看到的是B站上的視頻,我看的這個視頻老師講的特別詳細,推薦給大家。

學習 django 推薦視頻教程:https://www.bilibili.com/video/BV1JE411V7xk?p=1

相關焦點

  • 如何創建Django應用並連接資料庫
    在本文中,你將學習如何建立與MySQL資料庫連接的網站項目,使用django-admin創建此項目,並安裝和創建MySQL資料庫,然後將項目與資料庫連接。先決條件在學習本文內容之前,應該先完成以下步驟:在Ubuntu 16.04伺服器上安裝Django。
  • Python開發之:Django基於Docker實現Mysql資料庫讀寫分離、集群、主從同步詳解 | 原力計劃
    資料庫複製被用來把事務性操作導致的變更同步到集群中的從資料庫。在實際的生產環境中,對資料庫的讀和寫都在同一個資料庫伺服器中,是不能滿足實際需求的。無論是在安全性、高可用性還是高並發等各個方面都是完全不能滿足實際需求的。因此,通過主從複製的方式來同步數據,再通過讀寫分離來提升資料庫的並發負載能力。
  • Python基礎教程——秒懂django操作資料庫
    Mariadb資料庫,簡單易用、性能高Python和django提供了完善的操作資料庫及事務的方法,首先明確一點,這很簡單,一點也不複雜,下面你會看到,10行代碼就搞定了。現在,先上結論:如果我們只是很簡單的操作一下資料庫,我們推薦使用mysqlclient這個第三方庫如果對資料庫的操作要做一些處理,資料庫又會變動,或者業務需求比較複雜,那就推薦使用django簡易操作代碼實在太簡單,如下所示:
  • MySQL資料庫「十宗罪」(十大經典錯誤案例)
    今天就給大家列舉 MySQL 資料庫中,最經典的十大錯誤案例,並附有處理問題的解決思路和方法,希望能給剛入行,或資料庫愛好者一些幫助
  • Python連接MySQL資料庫方法介紹(超詳細!手把手項目案例操作)
    >Python 3.7.2pip 19.0.3兩種方法進行資料庫的連接分別是PyMySQL和mysql.connector步驟:連接資料庫安裝安裝pip install mysql查看版本pip show mysql利用 mysql.connector連接資料庫首先我們的MySQL資料庫已安裝,且已建好名為
  • MySQL 資料庫「十宗罪」(十大經典錯誤案例)
    今天給大家說說《資料庫中十大經典錯誤案例》老牛我在剛開始學習資料庫的時候,沒少走彎路。經常會遇到各種稀奇古怪的 error 信息,遇到報錯會很慌張,急需一個解決問題的辦法。跟無頭蒼蠅一樣,會不加思索地把錯誤粘到百度上,希望趕緊查找一下有沒有好的處理問題的方法。我想這個應該是剛從事資料庫的小白,都會遇到窘境。
  • 如何使用PyMySQL操作mysql資料庫?
    作者   Airy本文轉自公眾號AiryData,轉載需授權在工作和生活中我們用Python處理數據的情況並不少見,而且很多情況是從資料庫取數據,比如MySQL,這裡我來分享下簡單的Python操作MySQL
  • 10道題教你使用python Django框架來實現web應用,值得收藏
    升級django版本後,為django服務的第三方包需要對應升級。建議django不要立即使用最新版本,以免第三方包還不支持最新的django版本。關於mysql:mysqldb不支持python3,需要使用mysqlclient做資料庫API驅動。django2.0只支持myslq5.5或者更高版本一般性的版本升級注意事項。
  • 保障MySQL資料庫安全的14個最佳方法
    這行命令在MySQL啟動期間,禁用了網絡連接的初始化。請注意,在這裡仍可以建立與MySQL伺服器的本地連接。  另一個可行的方案是,強迫MySQL僅監聽本機,方法是在my.cnf的[mysqld]部分增加下面一行:  如果企業的用戶從自己的機器連接到伺服器或安裝到另一臺機器上的web伺服器,你可能不太願意禁用網絡訪問。
  • Mysql資料庫的使用方法
    你們讚賞就是對小編的鼓勵,都是你們的心意,小編收到了,在這邊感謝你們,謝謝    現在看軟體測試的招聘要求,基本都是要求會資料庫這一塊的,薪水越高所具備的技能也要越多,而資料庫知識則是一項必備技能了,所以今天小編就好好的普及下資料庫知識方面的基本使用方法!
  • java連接mysql資料庫的五種方式
    Jdbc-----資料庫的五種連接方式第一種方式:將用戶名和密碼封裝在Properties類中首先,導入資料庫連接包這個是毋庸置疑的。創建一個jdbc驅動dirver。將資料庫(以MySQL為例)的url保存在所創建的字符串url中。
  • python對mysql資料庫的操作(一)
    mysql操作mysql需要安裝對應的庫,下載地址為:https://pypi.python.org/pypi/MySQL-python/1.2.4,見截圖:下載安裝後,在python的命令行中,輸入import MySQLdb ,無任何的錯誤,表示該模塊操作成功,見截圖:
  • 從Web查詢資料庫之PHP與MySQL篇
    PHP+MySQL的組合是構建網站的一個常見搭配,不過如何使用PHP通過Web訪問MySQL資料庫呢?下面從Web資料庫架構的工作原理講起。
  • 沒遇到過這十個MySQL資料庫經典錯誤,你一定不是個好工程師
    筆者在剛開始學習資料庫的時候,沒少走彎路。經常會遇到各種稀奇古怪的 error 信息,遇到報錯會很慌張,急需一個解決問題的辦法。跟無頭蒼蠅一樣,會不加思索地把錯誤粘到百度上,希望趕緊查找一下有沒有好的問題處理方法。
  • MySQL資料庫及應用
    自然連接C. 笛卡爾積D. 查詢答案: A7 單選 資料庫、資料庫管理和資料庫系統之間的關係正確的是A. 資料庫包括了資料庫管理系統和資料庫系統B.數據連接D. 數據選擇答案: B第二章1 單選 設計關係資料庫模式時,很容易出現的問題是冗餘性,即一個事實在多個元組中重複。造成這種冗餘的最常見的原因是,企圖把一個對象的單值和多值特性包含在一個關係中。
  • Python——用 Django 寫 restful api 接口
    我用的 pymsql,pymsql 是 Python 中操作MySQL 的模塊,其使用方法和 MySQLdb 幾乎相同。但目前在 python3.x 中,PyMySQL 取代了 MySQLdb。1、連接資料庫db = pymysql.connect(host="localhost", user="root", password="123", db="mysql", charset="utf8mb4")cursor = db.cursor()  # 創建一個遊標對象2、創建資料庫
  • mysql之安裝和遠程登入操作學習總結
    在寫今天關於資料庫的文章之前,還是說一下這近一年來做筆記的感受,我通過這種學習方式:一邊學習一邊總結筆記,日後方便查看和理解;這一點在我從零基礎學習c語言和Linux應用上體現的淋漓盡致,從平時和大家的溝通交流,我能夠去通過以前寫的筆記,做到溫故而知新,同時再給網友講解裡面的原理的時候,又進一步加深了對該知識的理解。
  • 利用PowerDesigner連接Mysql資料庫並逆向所有表關係圖兩種方式
    想想還是從資料庫入手吧。於是想到了在2015年還是2016年的時候在梳理其他項目使用了powerDesigner連接mysql逆向生成表關係圖。可是當時怎麼做的?徹底忘了。常言:好記性不如爛筆頭,況且我這個沒記性的人了。所以就有了本文。為了以後在用有個參考,也為了有需要的朋友做個參考。好了,廢話不多說。開始幹。
  • VBA連接Mysql資料庫
    ■MySQL的環境配置■VBA連接MySQL資料庫的代碼框架(所有文中涉及到的附件,32和64位版本均提供安裝包,後臺回復mysql獲取),下面的界面也是Navicat裡面連接設置頁面。MySQL現在給出連接Mysql資料庫的框架代碼▍框架代碼:
  • Mysql常見的13個錯誤碼講解
    1067這個錯誤和TINESTAMP默認值有關,需查看官方文檔1292/1366 double和integer類型錯誤,檢查語法和數值類型1292 detatime錯誤,檢查插入的時間數據格式,是否超出範圍,帶時區格式的時間字符串格式是否有問題1292 VARIABLE 檢查你設置的VARIABLE屬性1292 LOAD