与另一个django项目中的外部django项目进行交互

时间:2011-11-02 21:59:57

标签: python django django-models

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

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

我理想的做法是将商店项目作为模块导入到django命令类中,然后以这种方式与它进行交互(请注意,他们正在处理2个单独的设置文件,因此setup_environ不会工作)。我想避免序列化爬虫数据,然后从商店导入它或与django的orm之外的商店数据库交互,因为这个项目远未完成,我宁愿保持尽可能灵活。

你会建议什么?只要我可以在一个脚本中与两个项目的orm进行交互,我就会有很多想法。

2 个答案:

答案 0 :(得分:3)

我之前做过这个......

所以,

项目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()

答案 1 :(得分:0)

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

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

如果您在新项目中保持外部模型同步,则无需执行任何额外工作,您可以使用类似南方应用程序的内容来迁移数据上下文。

通过这种方式,您只需在新项目中导入旧模型并让它们直接进行交互。

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