【问题标题】:Access data from second external SQLite database in Django从 Django 中的第二个外部 SQLite 数据库访问数据
【发布时间】:2022-01-06 00:47:41
【问题描述】:

这是我的项目结构

我可以通过直接在我的视图文件中导入模型来访问由 Django 创建的默认 SQLite 数据库 db.sqlite3

喜欢 - from basic.models import table1

现在,我有另一个名为 UTF.db 的数据库,它是由其他人创建的,我想访问它的数据并对检索到的数据执行正常的 QuerySet 操作

问题是我不知道如何在该数据库中导入表,因为它们不在我项目中的任何模型文件中,因为它是由其他人创建的

我尝试将UTF.db 数据库中的表添加到models.py 文件中,方法是先将其添加到settings.py 文件中,如下所示

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    },
    'otherdb':{
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'UTF.db',
    }
}

然后使用inspectdb 命令将表添加到现有的models.py 文件中

我试过的命令—— python manage.py inspectdb > models.py

但是,这只会导致我的 models.py 文件被清空

有谁知道如何解决这个问题?

最后,我希望通过导入相应的模型来导入我的视图文件中的表数据

【问题讨论】:

    标签: python django sqlite


    【解决方案1】:

    您可以指定Documentation中指定的特定数据库

    python manage.py inspectdb --database=otherdb > your_app/models.py
    

    如果可能的话,将 otherdb 放在不同的应用程序中会更好。

    【讨论】:

      【解决方案2】:

      您可以将第二个数据库附加到第一个数据库并在第一个数据库中使用它。您可以在单个 sql 查询中使用两个数据库中的表。 这是文档https://www.sqlite.org/lang_attach.html

      attach database '/path/to/dbfile.sqlite' as db_remote;
      
      select * 
      from some_table
      join db_remote.remote_table on ....
      
      detach database db_remote;
      

      【讨论】:

        【解决方案3】:

        @sevdimali 的回答可以很好地从现有数据库创建新模型

        完成后,您需要使用命令 -

        python manage.py makemigrations

        将更改添加到迁移文件夹

        然后使用命令

        python manage.py migrate --fake-initial

        将新的更改添加到您的数据库中

        注意:在添加新表时使用 --fake-initial 忽略已创建的表(这样它们就不会被重新创建)

        如果没有可以使用的现有模型

        python manage.py migrate

        就像你平时做的那样


        现在在视图中导入数据库模型时,您可以编写

        from Appname.models import Tablename

        Appname 是您添加新模型的应用程序

        并访问它的数据

        qs=Tablename.objects.using('otherdb').all()

        注意otherdbsettings.py文件中指定的外部数据库的名称

        现在您可以以类似的方式访问您的所有数据!!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-27
          • 2020-11-30
          • 2017-07-19
          • 2021-01-04
          • 1970-01-01
          • 1970-01-01
          • 2012-11-12
          • 2016-12-10
          相关资源
          最近更新 更多