简介:在使用PyCharm和Python 3.8和Postgresql开发我的第一个项目时,我正在学习Django。我的设置有问题。
环境描述:
我的目标是要有一个用于网站的Django项目连接到数据库(我们称它为“ web_db”),该项目定期接收来自外部源(另一个数据库的数据)的数据“ source_db”)。
对于从一个数据库到另一个数据库的ETL过程,我正在开发一个名为“ source2web”的Python模块。我使用psycopg2阅读了source_db的内容。我正在开发一个PyCharm项目中的所有内容。
现在,由于我将使用Django ORM从Django应用程序服务器访问web_db的内容,因此得出结论,我也可以在source2web中使用Django ORM将内容加载到web_db 。这意味着我正在尝试在Django项目和source2web之间共享一些代码:Django的ORM模型。source2web只是作为python模块(python source2web.py
)启动。
在我的PyCharm项目中,我有一个src文件夹,里面是我的所有python模块,带有像这样的树(文件夹带有括号表示):
(src)
|--(project_name)
|--(module1)
| |--source2web.py
|
|--(django)
|--(django_project)
|--(django_project)
|--(another_app)
[文件夹django_project/django_project
和django_project/another_app
由Django使用命令django-admin startproject django_project
和python3 manage.py startapp another_app
经典创建。
我要共享的ORM模型是文件django_project/another_app/models.py
中的模型类
问题:我很想找到一种方法来使用source2web中的Django ORM模型。我以为自己有:在source2web的代码中,我添加了以下几行:
os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.django.django_project.django_project.settings'
import django
django.setup()
但是,我意识到Django服务器和独立模块source2web都可以工作,但不能在project_name.django.django_project.django_project.settings.py
中使用完全相同的内容:INSTALLED_APPS列表中的another_app
名称必须不同。
another_app
project_name.django.django_project.another_app
我确信我可以找到一种“肮脏的方式”来解决这个问题,但我也认为我不是第一个遇到此问题的人(在Django项目和独立程序之间共享Django ORM代码),希望更清洁的方式来管理此。
我能想到的是复制模块project_name.django.django_project.django_project.settings
,然后仅更改source2web(os.environ['DJANGO_SETTINGS_MODULE'] = ...
)内的设置调用,但我从不喜欢复制代码,也许有比这更干净的东西了]
我发现至少一个体面的解决方法:
project_name.django.django_project.django_project.settings
文件中,我保留了可与Django一起使用的INSTALLED_APPS的值,即,由Django Project加another_app
创建的默认应用程序的列表。然后在[[source2web模块中,将我的导入块更改为::>的行将project_name.django.django_project.django_project.settings导入为djangosettingsdjangosettings.INSTALLED_APPS = ['project_name.django.django_project.another_app',]os.environ ['DJANGO_SETTINGS_MODULE'] ='project_name.django.django_project.django_project.settings'进口djangodjango.setup()
这样,我保留了Django服务器的设置,只覆盖了[[source2web
仍然,这使我开始质疑整个项目的结构:
因为显然,整个问题是PyCharm项目考虑源根src/
的结果,而Django项目考虑根project_name/django/django_project/
的结果。应该有一种和解的方法。