在 database_name 中返回 database_name == ':memory:' 或 'mode=memory' TypeError: 'PosixPath' 类型的参数不可迭代

Posted

技术标签:

【中文标题】在 database_name 中返回 database_name == \':memory:\' 或 \'mode=memory\' TypeError: \'PosixPath\' 类型的参数不可迭代【英文标题】:return database_name == ':memory:' or 'mode=memory' in database_name TypeError: argument of type 'PosixPath' is not iterable在 database_name 中返回 database_name == ':memory:' 或 'mode=memory' TypeError: 'PosixPath' 类型的参数不可迭代 【发布时间】:2021-01-18 23:13:20 【问题描述】:

我在 django 中制作了一个 webapp。我尝试将它部署在 pythonanywhere 上一切正常,但最后当我尝试使用python manage.py collectstatic 收集静态文件时,它给了我这个错误:

return database_name == ':memory:' or 'mode=memory' in database_name
TypeError: argument of type 'PosixPath' is not iterable

建议我如何解决它。

这是我的 setting.py 文件

import os
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '!25%rdt-$_$bsc*fl)e7x2*x6awjca^3_2t-k@l0tu*8k!f33&'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ['*']


# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    



# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    ,
    
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    ,
    
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    ,
    
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    ,
]

# Static files (CSS, javascript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR / 'static/')

【问题讨论】:

【参考方案1】:

如果您使用的是 Django v3.1,那么您可以尝试在 settings.py 文件中的数据库路径周围放置 str()。这是因为 SQLite 只接受字符串,而 Django v3.1 settings.py 返回一个 pathlib.Path 对象。

# settings.py

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    

我遇到了同样的问题,在这里找到了答案: https://forum.djangoproject.com/t/django-tutorial-python-manage-py-startapp-polls-fails/2718

【讨论】:

谢谢...为我工作。我试图移植到 django 3 感谢您的回答。我很困惑。【参考方案2】:

#in settings.py 做

# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / 'db.sqlite3'),
    

问题出在这里

BASE_DIR = Path(__file__).resolve().parent.parent

type(BASE_DIR)type(BASE_DIR / 'db.sqlite3') 都是 <class 'pathlib.PosixPath'>

【讨论】:

【参考方案3】:

也许你有一个错字,而不是','使用'/'。 STATIC_ROOT = os.path.join(BASE_DIR, 'static')

【讨论】:

【参考方案4】:

我在使用最新的 Django v3.1 时遇到了同样的问题 我遇到这个问题是因为我忘记激活虚拟环境了

【讨论】:

以上是关于在 database_name 中返回 database_name == ':memory:' 或 'mode=memory' TypeError: 'PosixPath' 类型的参数不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB基本操作

Django manage.py syncdb throwing No module named MySQLdb

(3.13)常用知识-元数据函数

在 Access 中选择 @@IDENTITY 总是返回 0

Django 测试:创建测试数据库时出错:数据库“database_name”已存在

Sql Server 常用函数