Django和奇怪的遗留数据库表

时间:2009-09-04 15:18:33

标签: python django database legacy

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

我遇到了一些由于数据库设计非常糟糕导致的奇怪表格的问题,但我无法自由更改它。

问题在于,有些表没有主键ID,但是产品ID,问题就是,如果某个列需要有多个值,很多都是多个,例如

ID  |   ...   |  namestring

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

此功能也可以是自定义管理器方法,或产品型号上的方法,或者对您最有意义的任何方法。

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