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