【问题标题】:Can the models.py file created by Django be used by another python file to fill in a database?Django创建的models.py文件可以被另一个python文件用来填充数据库吗?
【发布时间】:2012-07-04 20:51:50
【问题描述】:

我已按照 Django 网站 (https://docs.djangoproject.com/en/1.4/intro/tutorial01/) 上的教程(第 1 部分和第 2 部分),并设法创建了几个文件夹并连接到我的网站。我的应用名为“app”,所以我的文件夹结构有点像:

  • 主文件夹
  • ---__init__.py
  • ---test.py
  • ---djangoSite(由 Django 创建)
  • ------manage.py
  • ------ djangosite
  • --------- 其他 .py 文件
  • ----- 应用程序
  • ----------__init__.py
  • ---------models.py
  • --------- 其他 .py 文件

我将 models.py 文件更改为:

class Result(models.Model):
    options = models.CharField(max_length = 1000, unique = False)
    reverse = models.DecimalField(decimal_places = 6, max_digits = 12)

test.py 目前在其他一些类上运行几个测试。我想要的是让我的 test.py 类运行这些测试并将结果保存在数据库中(在列中 和反向)。我希望在我的 test.py 类中做这样的事情:

import models.py
if __name__ == "__main__":
    optionResult = someTestsThatRuns
    reverseResult = someOtherTestThatRuns
    models.Result c;
    c.options = optionResult 
    c.reverse = reverseResult 

我希望最后两行将结果保存在数据库中。 这可能吗?如何从 app 文件夹中导入 models.py?

谢谢

编辑: 当我说 someTestsThatRuns 时,这些不是单元测试。它们实际上是一个函数,它返回一个列表和一些带有“PASS”或“FAIL”的字符串。很抱歉造成混乱

【问题讨论】:

    标签: python django postgresql


    【解决方案1】:

    在 app 文件夹中创建一个空的 __init__.py 文件,以便 Python 将该目录视为一个包。然后做:

    from app.models import Result
    
    optionResult = someTestsThatRuns
    reverseResult = someOtherTestThatRuns
    c = Result()
    c.options = optionResult 
    c.reverse = reverseResult
    c.save()
    

    这会将“c”保存到数据库中。

    请注意,Django 的测试套件可以创建自己的测试数据库,该数据库在单独的数据库上运行测试。您可以在此处阅读有关 Django 测试的更多信息。 https://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs

    【讨论】:

    • 嗨,大卫,感谢您的第一次回复!我实际上正在考虑按照您的建议进行操作(并在发布此问题之前尝试过),但我遇到了我的 models.py 文件中的一个错误,上面写着 'line 4: from django.db import models' - ImportError: No module named db =/
    • 另外,我在阅读您发送给我的网站后添加了编辑。我的测试不是单元测试,也不是测试 Django 站点;它们是运行一些 c++ 类并在字符串和列表中获得一些结果的函数。很抱歉造成混乱=(
    • 进入命令行,启动 python,然后输入 import django.db。看看它是否会引发错误。如果它引发错误,Python 不会在其搜索路径上选择 django 包。在命令行中, import sys 后跟 print sys.path 将告诉您 Python 的搜索路径上有哪些目录。 Django 应该安装在这些目录之一下,通常在站点包中。如果 import django.db 从命令行工作,请确保在您正在使用的任何开发环境中选择正确的 Python 解释器。
    【解决方案2】:

    FIXED 正如大卫在 cmets 中提到的,确实没有设置环境变量。由于我在 Windows 中,所以我必须做的是开始 -> 计算机 -> 属性 -> 高级系统设置 -> 环境变量 -> 添加环境变量。

    在那里我添加了 'DJANGO_SETTINGS_MODULE' 及其位置为 'C:\path\to\your\settings.py' 然后,在命令提示符下,我必须执行以下操作:

    enter python
    >import sys
    >import os
    >sys.path.append(r"C:\location\to\settings.py")
    >from django.core.management import setup_environ
    >setup_environ(settings)
    >sys.path.append(os.getcwd() + '\\from\\current\\to\\models.py'
    >from models import Result 
    

    这一切都在http://www.b-list.org/weblog/2007/sep/22/standalone-django-scripts/ 进行了解释,尽管我确实觉得有点难以理解。我在导入模型时遇到的另一个问题是有两个名称完全相同的文件夹(djangoSite),因此在导入时,计算机在试图找出哪个文件夹时遇到了一些问题。我不得不重命名、删除、重置环境变量并重新检查我在整个文件中拥有的所有路径 =/

    如果我的解释不是最好的,我很抱歉,我几乎不明白我做了什么,但我希望这对以后的其他人有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2015-04-26
      • 2022-11-25
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多