Django使用Mysql資料庫

Step1)設定資料庫連線Mysql的資料庫net,更改settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'net',

'USER': 'root',

'PASSWORD': '',

}

}

Step2)建立資料庫的管理者資料表

檢查資料模型

#manage.py check

建立admin資料表

#manage.py makemigrations admin

在資料庫net建立admin資料表

#manage.py migrate admin

建立管理者帳號

#manage.py createsuperuser

建立管理者帳號出現錯誤(1048, "Column 'last_login' cannot be null")

刪除資料表django_migrations

mysql> truncate table django_migrations;

#manage.py migrate --fake-initial

出現 「Applying auth.0005_alter_user_last_login_null... OK」就可以修正錯誤(1048, "Column 'last_login' cannot be null")

再次建立管理者帳號,就可以順利建立

#manage.py createsuperuser

Step3)同步原來的資料庫net

自動產生資料庫net的資料表欄位

# manage.py inspectdb

# manage.py inspectdb > my/models.py

編輯my/models.py,因為Django會自動將沒有primary_key的資料表增加欄位id,但原本資料庫就沒有id欄位,會出現找不到id欄位錯誤,表格內一個欄位設定為primary_key=True

class Ip(models.Model):

ip = models.CharField(max_length=40, primary_key=True)

mac = models.CharField(max_length=30)

com = models.CharField(max_length=200)

class Meta:

managed = False

db_table = 'ip'

class Mac(models.Model):

mac = models.CharField(max_length=30, primary_key=True)

switch = models.CharField(max_length=40)

port = models.CharField(max_length=20)

class Meta:

managed = False

db_table = 'mac'

# manage.py migrate --fake-initial

# manage.py makemigrations my

# manage.py migrate my

Step4)編輯urls.py,新增admin.autodiscover(),會自動執行每個app內的admin.php

from django.contrib import admin

from django.urls import path

admin.autodiscover()

urlpatterns = [

path('admin/', admin.site.urls),

]

Step5)編輯admin.py,

from django.contrib import admin

from my.models import Ip, Mac

admin.site.register(Ip)

admin.site.register(Mac)

Step6)使用瀏覽器瀏覽 http://127.0.0.1:8000/admin/

使用Step2所產生的管理者帳號登入,可以看到資料表Ip與Mac