Django Python:AttributeError:“NoneType”对象没有属性“startswith”

问题描述 投票:0回答:1

运行时遇到错误

python3 manage.py runserver

我在项目的根目录中有

mydb.py
(与
manage.py
相同),以便连接到MySQL并创建数据库(如果不存在)。

project    
│
└───todo
│   │   ...
│   │   settings.py
│   │   ...
│   
└───.env
└───mydb.py
└───...

mydb.py
settings.py
共享相同的数据库配置,该配置是从
.env
中的环境变量加载的。

.env

ENV=DEV
SECRET_KEY='django-insecure-9#1j%osjd33e'
DB_NAME=todolist
DB_USER=user
DB_PASSWORD=12345
DB_HOST=localhost
DB_PORT=3306

settings.py

import os
from os.path import join, dirname
from dotenv import load_dotenv, find_dotenv

# (1)
ENV = os.environ.get('ENV')

if ENV == 'PROD':
    env_filename = '.env.prod'
elif ENV == 'TEST':
    env_filename = '.env.test'
# elif ENV == 'DEV':
#     env_filename = '.env.dev'
else:
    env_filename = '.env'

dotenv_path = join(dirname(__file__), env_filename)
load_dotenv(dotenv_path)

...

# Database
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD'),
        'HOST': os.environ.get('DB_HOST'),
        'PORT': os.environ.get('DB_PORT'),
    }
}

...

mydb.py

import mysql.connector

import os
from os.path import join, dirname
from dotenv import load_dotenv, find_dotenv

ENV = os.environ.get('ENV')

if ENV == 'PROD':
    env_filename = '.env.prod'
elif ENV == 'TEST':
    env_filename = '.env.test'
# elif ENV == 'DEV':
#     env_filename = '.env.dev'
else:
    env_filename = '.env'

dotenv_path = join(dirname(__file__), env_filename)
load_dotenv(dotenv_path)

dataBase = mysql.connector.connect(
    host = os.environ.get('DB_HOST'),
    user = os.environ.get('DB_USER'),
    passwd = os.environ.get('DB_PASSWORD'),
)

dataBase = mysql.connector.connect()
...

问题:

我不断收到以下错误,即使

DB_HOST
已在
.env
中设置。

...
File "/home/user/django-test/.venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py", line 218, in get_connection_params
    if settings_dict["HOST"].startswith("/"):
AttributeError: 'NoneType' object has no attribute 'startswith'

我检查了 AttributeError: 'NoneType' object has no attribute 'startswith' while makemigrations with manage.py in django 以及其他一些相关问题,但没有找到任何帮助。

谢谢你

python mysql django mysql-python
1个回答
0
投票

问题可能是这样的:

join(dirname(__file__), env_filename)

这是在

todo/settings.py
,所以会寻找
todo/.env

您需要再上一级目录。

© www.soinside.com 2019 - 2024. All rights reserved.