Django执行python manage.py migrate时报如下错误:
File “/root/.python_env/.virtualenvs/venv/lib/python3.9/site-packages/django/db/backends/sqlite3/creation.py”, line 12, in is_in_memory_db
return database_name == ‘:memory:’ or ‘mode=memory’ in database_name
TypeError: argument of type ‘PosixPath’ is not iterable
这个问题应该是django2.0版本和python新版本不兼容导致的(我安装的是Django 2.2.13, Python 3.9.0)
django2.0中,django/db/backends/sqlite3/creation.py的代码如下
而最新的django3.1此处的代码为:
如果不想升级django的话可以参照新版django修改即可。
不过要在文件前面导入Path,即:
from pathlib import Path
所以改动如下:vim /root/.python_env/.virtualenvs/venv/lib/python3.9/site-packages/django/db/backends/sqlite3/creation.py
1 2 3 4 5 6 7 8 9 10 11 |
from pathlib import Path class DatabaseCreation(BaseDatabaseCreation): @staticmethod def is_in_memory_db(database_name): #return database_name == ':memory:' or 'mode=memory' in database_name # ref: https://blog.csdn.net/jason_cdd/article/details/108609917 return not isinstance(database_name, Path) and ( database_name == ':memory:' or 'mode=memory' in database_name ) |