0

我正在尝试在 Django 中集成一个遗留数据库。

我遇到了一些由糟糕的数据库设计导致的奇怪表的问题,但我不能随意更改它。

问题是有些表没有主键 ID,但是有产品 ID,问题来了,如果某个列需要多个值,它们中的很多都是多个,例如

ID  |   ...   |  namestring

2   |   ...   |  name1
2   |   ...   |  name2 

是否有可能绕过通常的主键行为并编写一个函数,该函数为具有多行的此类 ID 返回一个对象?列名字符串可以成为一个列表。

不需要手动编辑,因为这是从另一个系统导出的数据,我只需要访问它..

4

1 回答 1

2

除非您添加唯一的主键列,否则 Django 的 ORM 将无法使用此表。

如果您确实添加了主键,那么编写一个方法来查询给定的产品 ID 并返回与该产品 ID 对应的值列表将是微不足道的。就像是:

def names_for(product_id):
    return [row.namestring for row in ProductName.objects.filter(product_id=product_id)]

此函数也可以是自定义管理器方法,或 Product 模型上的方法,或任何对您最有意义的方法。

编辑:假设您有一个产品模型,此表中的 product_id 引用,并且您对该表的唯一用途是查找给定产品的这些名称,您的另一个选择是将此表排除在完全是 ORM,只需在 Product 上编写一个方法,该方法使用原始 SQL 和 cursor.execute来获取该产品的名称。这很好,很干净,不需要向表中添加唯一的 PK。您失去的主要是通过 Django 模型或管理员管理此表的能力。

于 2009-09-04T18:00:32.120 回答