这里是当前的情况下,我有2个数据库的项目
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'DB1',
'USER': 'DB1_ADMIN',
'PASSWORD': '1234',
'HOST': 'localhost',
'PORT': 5432,
'ATOMIC_REQUESTS': True,
},
'crm': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'DB2',
'USER': 'DB2_ADMIN',
'PASSWORD': '1234',
'HOST': 'localhost',
'PORT': 5432,
'ATOMIC_REQUESTS': True,
},
}
我可以将django的ORM用于DB1,因为它是这个项目的主数据库,但DB2是另一个项目的数据库,因此DB2中的表不会被当前项目中的模型反映出来。
我能够使用原始查询从DB2读取和写入数据,如下所示
rfp_query = f"""SELECT id, currency, estimated_budget, reconciled_budget, savings, total_items
FROM accounting_rfpbudget WHERE rfp_id = {rfp_id} """
cursor = connections['crm'].cursor()
cursor.execute(rfp_query)
但是我想使用django的ORM,因为我自己管理所有的东西需要花费大量的精力和时间,请告诉我是否有任何方法可以使用django的ORM forDB2记住,项目中没有与数据库表相关联的模型。
1条答案
按热度按时间xnifntxz1#
回答我自己的问题,因为我刚刚得到了解决方案,它可能对其他人有帮助,manage.py提供了一个非常有用的命令,称为inspectdb,它将为您创建所有模型。考虑以下步骤。
1.运行命令
python manage.py inspectdb --database name-of-db > secondary_db_models.py
,这将创建一个名为secondary_db_models.py的文件,其中包含数据库中的所有模型。以下是一个模型的示例你不能在class meta中看到managed = False,这意味着此应用/项目将不会维护此模型的迁移。
1.你必须保留上面的文件,在应用程序中拥有模型。
1.现在,从项目中任何位置导入文件中的模型,您将能够使用这些模型。
这里需要注意的一点是,如果辅助数据库的模式发生变化,那么您必须再次运行该命令,否则新表或模型将不会显示。