Django教程中用Python脚本操作数据库时遇导入错误求助
解决Django脚本操作数据库的导入错误问题
嘿,我猜你碰到的导入错误大概率是因为脚本没有加载Django的运行环境——毕竟Django的模型不是普通Python模块,它依赖项目的配置上下文才能被正确导入。我来一步步帮你搞定这个问题:
第一步:初始化Django环境
在你的脚本最开头,必须先告诉Python去哪里找Django的项目配置,添加这段代码:
import os import django # 替换成你自己的项目settings路径,比如如果项目叫mysite,就是mysite.settings os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings') django.setup()
没有这一步,Python根本不知道你的Django项目结构,自然找不到polls.models。
第二步:修正脚本里的小问题
看你的代码里还有几个可以优化的地方:
qtext=q是引用赋值,修改qtext会直接改变q数组,建议改成qtext = q.copy()来创建独立副本q[2,2]=...没写完,我帮你补了个示例选项
修正后的完整脚本如下:
import os import django import numpy as np # 初始化Django环境 os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名.settings') django.setup() # 现在可以正常导入模型了 from polls.models import Question, Choice from django.utils import timezone # Questions nquestions = 3 q = np.empty([nquestions, 10], dtype=object) qtext = q.copy() # 用copy避免引用赋值的关联问题 qtext[0] = "What's up?" qtext[1] = "What's new?" qtext[2] = "What's old?" # Choices q[0,1] = "Not much" q[0,2] = "The sky" q[1,1] = "This question" q[1,2] = "This answer" q[2,1] = "No more originality" q[2,2] = "The same old stuff" # 补全未完成的选项 # 实际写入数据库的逻辑(你之前的脚本缺这部分,补上示例) for i in range(nquestions): # 创建Question记录 question = Question.objects.create( question_text=qtext[i], pub_date=timezone.now() ) # 为每个问题添加对应选项 choice_index = 1 while q[i, choice_index] is not None: Choice.objects.create( question=question, choice_text=q[i, choice_index], votes=0 ) choice_index += 1
额外注意事项
- 运行脚本时,确保终端处于Django项目根目录(就是包含
manage.py的文件夹) - 检查你的
pollsapp是否已经添加到项目settings.py的INSTALLED_APPS里,不然模型还是会找不到 - 如果你只是临时操作数据库,其实可以直接用Django自带的
python manage.py shell,它会自动加载环境,不用手动写初始化代码
内容的提问来源于stack exchange,提问作者Marcus Grass
相关产品推荐
相关产品推荐

