Epiphany131 2023-03-28 21:31 采纳率: 78.9%
浏览 22

django 无法导入数据库中的表

django无法导入数据库中的表
原来的代码是:

from .models import Author

debug错误提示:
ImportError: attempted relative import with no known parent package

当我把位置改为绝对路径时(from author.models import Author)
显示我环境变量配置有问题:django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

修改环境变量后反而其他配置出问题,所以又改回来了。
重新建了一个项目,导入了所有文件,仍然是同样的错误。

已确认app在settings中注册:

img

请问是哪里有问题?

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-29 06:58
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/952670
    • 你也可以参考下这篇文章:解决django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings...问题
    • 除此之外, 这篇博客: django3.0报错django.core.exceptions.ImproperlyConfigured中的 django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      环境:python 3.6 django3.0

      项目名:BookRecommend
      app名:data
      aaa.py 是data下新建的一个python文件

      寒假期间我自学了django用的最新版本,然而在我新建的一个python文件中导入models时它报了这样一个错误

      我通过上网搜索,发现只有django2.0的解决方法,没有找到django3.0的,
      我试过没有效果的方法就不再说了。(有的可能是不够详细,所以没有解决)
      我按照网上的方法加上了这些代码
      import os
      import django
      os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “BookRecommend.settings”)
      django.setup()
      由于加的位置不对,再次报错(网上的解决办法没有详细说明)
      在这里插入图片描述
      于是无奈之下只好翻官方文档,最终发现问题所在
      在这里插入图片描述
      在这里插入图片描述
      文档中强调:
      第一个django导入 INSTALLED_APPS .

      如果是应用程序配置类,Django将导入应用程序的根包,该根包由 name 属性。如果它是一个python包,Django会创建一个默认的应用程序配置。

      在这个阶段,您的代码不应该导入任何模型!

      换句话说,应用程序的根包和定义应用程序配置类的模块不应该导入任何模型,甚至是间接导入。

      严格来说,Django允许在加载应用程序配置后导入模型。但是,为了避免不必要的限制 INSTALLED_APPS ,强烈建议在此阶段不要导入任何模型。

      完成此阶段后,在应用程序配置(如 get_app_config() 变得有用。
      于是我将代码换了位置:
      在这里插入图片描述
      问题得到了解决。
      在此提醒:
      BookRecommend是我的项目名,更改时需要改成自己的项目名
      然后再说一下自己血的教训:
      有人给我说可能是我的app名字,即data这个名字与关键字重了,让我改名字试试
      虽然我没有在网上找到data重名的这个可能性,但我还是试了一下,直接使用重命名失败,但我发现项目中涉及到的名字已经改变,而且python、django自带的某些文件中也出现了,不知道有没有被更改,好在项目运行暂时没有出问题。
      所以一定一定不要病急乱投医,轻易使用app重命名,因为可能自带的文件中涉及到了app的名字,后果很严重!!!
      再者,我改过数据库的表的字符长度,也改了迁移文件,还改了模型类,朋友帮我解决问题时,说可能有影响,重新迁移一次,最终我删了数据库(原因是有些表删不了。。。),重新迁移了一次,重新导入了数据。。。。。。
      虽然不知道会不会有影响,建议,不要更改迁移文件,数据库表的结构,还有模型类

      本文涉及到的官方文档django3.0连接:

      https://www.osgeo.cn/django/ref/applications.html#app-loading-process.

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • bilal-abdurehim 2023-03-29 09:37
    关注

    问题可能出在您的导入语句上。如果您的models.py文件位于应用程序的根目录下,您可以使用以下语句导入模型:

    from .models import Author
    

    注意,这是一个相对导入。如果您使用此导入语句并且在另一个模块中使用它,则必须从与models.py相同的目录中导入该模块。否则,您可能会遇到“attempted relative import with no known parent package”错误。

    如果您的models.py文件位于应用程序的根目录之外,您可以使用以下语句导入模型:

    from author.models import Author
    

    注意,这是一个绝对导入。如果您使用此导入语句并且在另一个模块中使用它,则应用程序的根目录不需要与models.py文件位于同一目录中。

    如果您仍然遇到“settings are not configured”错误,请确保您已正确设置了DJANGO_SETTINGS_MODULE环境变量。有关如何设置此变量的说明取决于您的操作系统和IDE。如果您无法解决该问题,请尝试在Django项目的顶部添加以下代码:

    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
    

    请注意,您需要将'your_project.settings'替换为您的Django项目的实际设置模块路径。

    希望这可以帮助您解决问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月28日

悬赏问题

  • ¥15 编译arm板子的gcc
  • ¥20 C语言用栈实现无向图邻接矩阵广度优先遍历
  • ¥15 C++代码报错问题,c++20协程
  • ¥15 c++图Djikstra算法求最短路径
  • ¥15 Linux操作系统中的,管道通信问题
  • ¥15 ansible tower 卡住
  • ¥15 等间距平面螺旋天线方程式
  • ¥15 通过链接访问,显示514或不是私密连接
  • ¥100 系统自动弹窗,键盘一接上就会
  • ¥50 股票交易系统设计(sql语言)