【问题标题】:interacting with an external django project from within another django project从另一个 django 项目中与外部 django 项目交互
【发布时间】:2011-11-02 21:59:56
【问题描述】:

我正在寻找一种从单独的 django 项目中与 django 项目的模型进行交互的方法。我不是指不同的应用程序,我是指具有 2 个独立设置文件的 2 个独立项目。

我正在将一个旧的网上商店(真的很旧,都是静态的 html)迁移到我们基于 django 的后端。为此,我创建了一个单独的 django 应用程序,它使用 django orm 和一些用于人工辅助解析的视图来处理所有的爬取和解析。现在,我需要使用爬虫项目中存储的数据填充后端的目录数据。在过去 2 天的大部分时间里,我都在试图找出一种方法,但没有运气。

我最理想的做法是将 store 项目作为模块导入 django 命令类,然后以这种方式与之交互(请注意,它们使用 2 个单独的设置文件,所以 setup_environ 不会工作)。我想避免序列化爬虫数据,然后从商店中导入它或与 django 的 orm 之外的商店数据库进行交互,因为这个项目还远未结束,我希望尽可能保持灵活性。

你有什么建议?只要我可以在一个脚本中与这两个项目的 orm 交互,我就可以提出疯狂的想法。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    我以前做过...

    所以,

    项目 A、项目 B

    项目 B 想调用项目 A 中的模型...

    1) 项目 B 使用与项目 A 相同的用户/登录名连接到相同的数据库。

    如果是这样,那么您可以将模型从项目 A 导入到项目 B 并像往常一样与它们交互。

    2) 项目 B 连接到与项目 A 不同的数据库。

    您可以在项目 B 的设置文件中定义两个数据库。

    DATABASES = {
        'default': {
            'NAME': 'app_data',
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'USER': 'postgres_user',
            'PASSWORD': 's3krit'
        },
        'users': {
            'NAME': 'user_data',
            'ENGINE': 'django.db.backends.mysql',
            'USER': 'mysql_user',
            'PASSWORD': 'priv4te'
        }
    }
    

    然后定义一个db router,这样 django 就知道该去哪个数据库从项目 A 中获取模型的数据

    您可以在调用 ORM 时明确设置要使用的数据库,例如:

    Author.objects.using('other').all()

    【讨论】:

    • 两个不同的项目在项目中有完全不同的应用程序怎么样?如何从项目B调用项目A中的ORM?
    【解决方案2】:

    为什么不将爬虫中的模型复制到新项目中(所以它们是在同一个项目空间中创建的),然后只需使用 django 的 manage.py 将旧爬虫项目中的数据转储到 json 文件中并迁移过来你的新项目?

    如果您的爬虫项目是设置/数据库类型独立的,您应该能够将您的处理程序/视图/网址迁移到新项目并将它们也合并在一起?

    如果您在新项目中保持外部模型同步,您将无需做任何额外的工作,您可以使用类似 south app 的工具来迁移数据上下文。

    这样您就可以简单地在新项目中导入旧模型并让它们直接交互。

    否则,您正在查看消息传递/网络通信,即进程间通信。

    【讨论】:

    • 如果你的服务器是一个 *nix 机器,你甚至可以将旧应用程序中的模型符号链接到新项目中。这样一来,它们都会看起来像不同的模型,但它们会使用相同的代码,因此当一个更新时,另一个也会更新。
    • 其实这是一个很好的建议。我只想补充一点,windows 和 mac 都支持符号链接。在 Windows 上它由 NTFS 通过 mklink 提供,在 Mac 上它们被称为别名。
    • 我考虑过这样的事情,符号链接的想法实际上是一个好主意。但是,出于几个原因,我想避免这种情况。爬虫正在处理工作/新数据,因此将表从一个项目复制到另一个项目会带来麻烦。此外,迁移和更新数据将是一个迭代过程,需要爬虫跟踪更新的内容。所以现在我们正在讨论来回复制表格。最后,这不是世界末日,而是爬虫中的所有应用都与商店应用共享名称。
    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2021-06-22
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多