独立目录脚本无法加载Django模型,如何正确调用并操作数据库?
解决Django外部脚本无法导入模型的问题
问题原因
脚本找不到snippets模块,核心原因是未将Django项目的根目录(Main-Project/django/)添加到Python模块搜索路径,同时导入语句和部分语法存在错误。
修正步骤
1. 调整模块搜索路径,添加Django项目根目录
原脚本仅将Main-Project/加入搜索路径,但snippets应用位于Main-Project/django/目录下,需把该目录也加入sys.path:
import os import sys import django current_dir = os.path.dirname(os.path.abspath(__file__)) # 拿到Main-Project/目录 parent_dir = os.path.dirname(current_dir) # 拼接出Django项目根目录:Main-Project/django/ django_project_dir = os.path.join(parent_dir, 'django') # 将Django项目根目录加入模块搜索路径 sys.path.append(django_project_dir)
2. 修正模型导入语句
原导入语句from django.snippets.models import Snippet错误,正确写法是直接从snippets应用导入:
from snippets.models import Snippet
3. 修复脚本语法错误
原脚本中filename.endwith('.txt')为拼写错误,需改为filename.endswith('.txt')。
完整修正后的脚本
import os import sys import django current_dir = os.path.dirname(os.path.abspath(__file__)) parent_dir = os.path.dirname(current_dir) django_project_dir = os.path.join(parent_dir, 'django') sys.path.append(django_project_dir) # 修正settings模块路径,原写法django.django.settings错误 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django.settings') django.setup() from snippets.models import Snippet def import_articles(directory): for filename in os.listdir(directory): if filename.endswith('.txt'): file_path = os.path.join(directory, filename) # 添加utf-8编码避免中文读取报错 with open(file_path, 'r', encoding='utf-8') as file: content = file.read() Snippet.objects.create(filename=filename, content=content) if __name__ == '__main__': text_dir = os.path.join(current_dir, 'text-files') import_articles(text_dir)
额外说明
DJANGO_SETTINGS_MODULE需对应正确路径:你的settings.py位于Main-Project/django/django/settings.py,因此设置为django.settings即可,无需嵌套两层django。- 读取文件时指定
encoding='utf-8',可避免中文文本出现编码异常。
内容的提问来源于stack exchange,提问作者Jake Mulhern
相关产品推荐
相关产品推荐

