在 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' 类型的参数不可迭代的主要内容,如果未能解决你的问题,请参考以下文章
Django manage.py syncdb throwing No module named MySQLdb
在 Access 中选择 @@IDENTITY 总是返回 0