Django 数据库配置(二)

动态连接数据库

  动态连接数据库是为了在系统不中断的情况下切换到另一个数据库,因为在settings.py中配置数据库时,每次保存都会自动重启Django,在有用户正在使用时,这种操作会导致用户的数据丢失,为避免这种情况。可以将数据库的连接方式写到配置文件中,这样无需修改settings.py的配置就可以切换数据库的目的。

首先在项目目录下,创建配置文件mysql.cnf,然后在配置文件mysql.cnf中写入mysql数据库的连接信息,代码如下:

#mysql 数据库链接配置
[client]
database = accent
user = root
password = root@123
host = 192.168.129.130
port = 3306

database = manage
user = root
password = root@123
host = 192.168.129.130
port = 3306

在Django的settings.py配置文件中,修改数据库连接读取配置文件的信息,代码如下:

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    #读取数据库配置文件中的数据库连接信息
    "default":{
        "ENGINE":"django.db.backends.mysql",
        "OPTIONS":{"read_default_file":str(BASE_DIR / "mysql.cnf")},
    }

}

验证mysql.cnf配置文件是否能访问数据库,在项目的urls.py中设置路由index,且路由视图函数indexView(),代码如下:

from django.contrib import admin
from django.urls import path,re_path
from myapp.views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path("",index),
]

在视图中读取数据库信息,并打印到页面上:

from django.shortcuts import render
from django.contrib.contenttypes.models import ContentType
# Create your views here.


def index(request):
    c = ContentType.objects.values_list().all()
    content = {}
    content["dbinfo"] = c
    return render(request,"index.html",content)

修改index.html模板内容,显示数据库信息

<html lang="en">
    <head>
        <mete charset="utf-8"></mete>
        <title>hello word</title>
    </head>

<body>
    <p>{{dbinfo}}</p>
</body>

</html>

启动Django之前,需要新创建数据库表,在项目路径下,执行以下命令:

python manage.py migrate

启动Django服务:

python manage.py runserver 8000

 

 在浏览器中访问服务器地址:https://127.0.0.1:8000

问题:在python manage.py migrate 时会报django.db.utils.OperationalError: (1045, "Access denied for user 'Administrator'@'localhost' (using password: NO)")

将数据库配置信息打印出来,参数配置没有问题,但是貌似没有读取数据库配置文件的内容,如下:

解决方式:后面网上找到一篇帖子:https://code.djangoproject.com/ticket/24653

在settings.py配置文件中,导入io模块,在数据库配置中引入io路径拼接,如下:

 

 再将DATABASES改为:

    "default":{
        "ENGINE":"django.db.backends.mysql",
        "OPTIONS":{"read_default_file":os.path.join(BASE_DIR / "MyDjango/mysql.cnf")},
    }

 

 再次执行python mange.py migrate 就能创建数据库成功。

 

posted @ 2022-03-27 13:37  西夏一品唐  阅读(389)  评论(0编辑  收藏  举报