TypeError: connect() 参数 4 必须是 str,而不是 WindowsPath。 /*我在简单登录 django 项目中遇到的错误*/

Posted

技术标签:

【中文标题】TypeError: connect() 参数 4 必须是 str,而不是 WindowsPath。 /*我在简单登录 django 项目中遇到的错误*/【英文标题】:TypeError: connect() argument 4 must be str, not WindowsPath . /*The Error that i m getting in my simple login django project*/ 【发布时间】:2021-05-20 14:47:53 【问题描述】:

系统检查未发现任何问题(0 静音)。

您有 18 个未应用的迁移。在您为应用程序应用迁移之前,您的项目可能无法正常工作:admin、auth、contenttypes、sessions。 运行“python manage.py migrate”以应用它们。 2021 年 2 月 17 日 - 19:52:27 Django 3.1.6 版,使用设置'felix.settings' 在http://127.0.0.1:8000/ 启动开发服务器 使用 CTRL-BREAK 退出服务器。 C:\Users\FELIX\OneDrive\Desktop\Projects\django login2\felix\felix\settings.py 已更改,正在重新加载。 使用 StatReloader 监视文件更改 正在执行系统检查...

系统检查未发现任何问题(0 静音)。 线程 django-main-thread 中的异常: 回溯(最近一次通话最后): _bootstrap_inner 中的文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\threading.py”,第 950 行 自我运行() 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\threading.py”,第 888 行,运行中 self._target(*self._args, **self._kwargs) 包装器中的文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\autoreload.py”,第 53 行 fn(*args, **kwargs) 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\commands\runserver.py”,第 121 行,inner_run self.check_migrations() 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\base.py”,第 459 行,在 check_migrations 执行器 = MigrationExecutor(连接[DEFAULT_DB_ALIAS]) init 中的文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\migrations\executor.py”,第 18 行 self.loader = MigrationLoader(self.connection) init 中的文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\migrations\loader.py”,第 53 行 self.build_graph() 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\migrations\loader.py”,第 216 行,在 build_graph self.applied_migrations = recorder.applied_migrations() 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\migrations\recorder.py”,第 77 行,在应用迁移 如果 self.has_table(): 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\migrations\recorder.py”,第 55 行,在 has_table 以 self.connection.cursor() 作为光标: 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\asyncio.py”,第 26 行,在内部 返回函数(*args,**kwargs) 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\backends\base\base.py”,第 259 行,位于光标处 返回 self._cursor() 光标中的文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\backends\base\base.py”,第 235 行 self.ensure_connection() 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\asyncio.py”,第 26 行,在内部 返回函数(*args,**kwargs) 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\backends\base\base.py”,第 219 行,在 ensure_connection self.connect() 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\asyncio.py”,第 26 行,在内部 返回函数(*args,**kwargs) 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\backends\base\base.py”,第 200 行,在连接中 self.connection = self.get_new_connection(conn_params) 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\asyncio.py”,第 26 行,在内部 返回函数(*args,**kwargs) 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\backends\mysql\base.py”,第 234 行,在 get_new_connection 返回 Database.connect(**conn_params) 文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\MySQLdb_init.py”,第 130 行,在 Connect 返回连接(*args,**kwargs) init 中的文件“C:\Users\FELIX\AppData\Local\Programs\Python\Python39\lib\site-packages\MySQLdb\connections.py”,第 185 行 super().init(*args, **kwargs2) TypeError: connect() 参数 4 必须是 str,而不是 WindowsPath

【问题讨论】:

【参考方案1】:

我在进行 makemigrations 时收到了类似的错误信息,并且 str() 有效。

# BASE_DIR = Path(__file__).resolve().parent.parent
DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': 
            'read_default_file': str(BASE_DIR / 'my.cnf')
        
    

【讨论】:

【参考方案2】:

TypeError: connect() argument 4 must be str, not WindowsPath, parece referirse a que la línea 4 de la conxión tiene un formato no estándar para el path, solo es revisar el formato de la conexión a DB, por ejemlo:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'project_django_1',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': 3306,
    

【讨论】:

【参考方案3】:

你设置mysql数据库设置了吗? 请检查您是否正确设置了 DATABASE。

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': 'mysql username',
        'PASSWORD': 'mysql user password',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    

【讨论】:

以上是关于TypeError: connect() 参数 4 必须是 str,而不是 WindowsPath。 /*我在简单登录 django 项目中遇到的错误*/的主要内容,如果未能解决你的问题,请参考以下文章

cv2.rectangle:TypeError:由名称('厚度')和位置(4)给出的参数

python脚本中的TypeError

得到 "TypeError: connect.describeSecurityProfile is not a function" ,即使我确保一切都类似于 Amazon SDK

TypeError:无法调用 null 的方法“查询”-使用 Heroku node.js 调用 pg.connect 时

TypeError: __init__() 接受 2 个位置参数,但给出了 4 个

TypeError: _this.store.getState is not a function when using connect from Redux