【问题标题】:AttributeError: 'NoneType' object has no attribute 'startswith' while makemigrations with manage.py in djangoAttributeError:'NoneType'对象没有属性'startswith',而在django中使用manage.py进行迁移
【发布时间】:2018-12-01 23:48:24
【问题描述】:

我正在使用 Django 1.9.13 和 python 2.7.5 当我进行迁移时,我得到以下错误。 我检查了数据库设置,一切都可以与其他应用程序一起使用。 我想不出解决办法。

我在后端使用 mysql 数据库。 我正在使用一个从测试环境中携带的应用程序。

Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/core/management/__init__.py", line 353, in 
execute_from_command_line
utility.execute()
File "/root/projects/misque/lib/python2.7/site-p 
Packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/core/management/base.py", line 398, in execute
self.check()
File "/root/projects/misque/lib/python2.7/site- 
packages/django/core/management/base.py", line 426, in check
include_deployment_checks=include_deployment_checks,
File "/root/projects/misque/lib/python2.7/site- 
packages/django/core/checks/registry.py", line 75, in run_checks
new_errors = check(app_configs=app_configs)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/core/checks/model_checks.py", line 28, in check_all_models
errors.extend(model.check(**kwargs))
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/models/base.py", line 1178, in check
errors.extend(cls._check_fields(**kwargs))
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/models/base.py", line 1255, in _check_fields
errors.extend(field.check(**kwargs))
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/models/fields/__init__.py", line 925, in check
errors = super(AutoField, self).check(**kwargs)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/models/fields/__init__.py", line 208, in check
errors.extend(self._check_backend_specific_checks(**kwargs))
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/models/fields/__init__.py", line 317, in 
_check_backend_specific_checks
return connections[db].validation.check_field(self, **kwargs)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/mysql/validation.py", line 18, in check_field
field_type = field.db_type(connection)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/models/fields/__init__.py", line 625, in db_type
return connection.data_types[self.get_internal_type()] % data
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/__init__.py", line 36, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/mysql/base.py", line 184, in data_types
if self.features.supports_microsecond_precision:
File "/root/projects/misque/lib/python2.7/site- 
packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/mysql/features.py", line 53, in 
supports_microsecond_precision
return self.connection.mysql_version >= (5, 6, 4) and Database.version_info 
>= (1, 2, 5)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/utils/functional.py", line 33, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/mysql/base.py", line 359, in mysql_version
with self.temporary_connection():
File "/usr/lib64/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/base/base.py", line 564, in temporary_connection
cursor = self.cursor()
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/base/base.py", line 231, in cursor
cursor = self.make_debug_cursor(self._cursor())
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/base/base.py", line 204, in _cursor
self.ensure_connection()
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/base/base.py", line 199, in ensure_connection
self.connect()
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/base/base.py", line 170, in connect
conn_params = self.get_connection_params()
File "/root/projects/misque/lib/python2.7/site- 
packages/django/db/backends/mysql/base.py", line 251, in 
get_connection_params
if settings_dict['HOST'].startswith('/'):
AttributeError: 'NoneType' object has no attribute 'startswith'

Mysql DB 工作正常,我可以看到 db 和表。 应用在settings.py中添加

【问题讨论】:

  • 您自己添加了if settings_dict['HOST'].startswith('/'): 吗?
  • 您需要发布您的 DATABASES 设置。
  • 不,我没有添加它。它与 python 和 django 一起提供
  • DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'college', 'USER': 'root', 'PASSWORD': 'mypassA', 'HOST': 'localhost', # 或者您的数据库托管在 'PORT' 上的 IP 地址:'3306', } }
  • 此数据库设置正在与另一个应用程序一起使用。我删除了该应用并在此处复制了一个新应用。

标签: python mysql django python-2.7


【解决方案1】:

我发现设置中有另一个 DATABASES 配置。我删除了那个。现在好了

【讨论】:

    【解决方案2】:

    在我的情况下,我正在从 env 文件中读取 DB Credentials,它有一些错误。当我解决这个问题时。

    【讨论】:

      【解决方案3】:

      首先,注意:在 Windows 中,如果您从 .env 文件加载数据库连接变量,您可能必须使用“set”而不是“export”

      在 python 中,我们有 3 种不同的方式来存储凭据并使用 Python 读取它们。

      1. 将它们存储为系统变量
      2. 将它们作为变量存储在您的 虚拟环境
      3. 将它们存储在 .env 文件中

      确保您选择最方便的方式。

      创建一个全局环境变量,

      export varName=varValue
      

      确保“=”之间没有空格。如果你得到一个错误“zsh: Bad Assignment”,可能是因为'='之间的空格造成的。

      例如,你可以说创建这些变量

      export globalSecretUser=global_uganda
      export globalSecretKey = global_famitechsolutions
      

      访问它们

      import os
      print(os.environ) 
      # This will print a dictionary with 
      # all the global environment variables
      

      我们可以使用字典访问方法来读取环境变量,即使用 .get() 或 [ ] 如下所示

      print(os.environ.get('globalSecretUser'))
      print(os.environ.get('globalSecretKey'))
      '''
      global_uganda
      global_famitechsolutions
      '''
      

      要更新环境变量,只需再次运行导出语句 export globalSecretUser=Updated_UgandaMountainGorillas

      要删除环境变量,我们使用 unset 关键字

      unset globalSecretUser
      

      需要注意的是,如果您尝试访问 Python 中的变量(不存在),您将获得 KeyError 或 None,具体取决于您用于访问字典中的值的方法。

      就我而言,我在 Windows 7 上使用导出而不是设置

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 2019-07-06
        • 2012-12-21
        • 2015-06-15
        • 2018-02-11
        • 2016-10-21
        相关资源
        最近更新 更多