CompositeKey作为peewee中的外键使用mysql

时间:2014-02-16 17:31:28

标签: mysql python-2.7 foreign-keys peewee

我正在使用peewee作为我的mysql DB的ORM。 我的方案中有3个表,一个用于设备,一个用于应用程序,一个用于每个设备的每个设备应用程序和测试应用程序的结果。 APPS表如下:

package name | version name | version code |apk name

3个第一列是我的主键,因为我想要我的表中的每个修订版本,我希望根据某些版本代码轻松过滤应用程序(版本代码随git \ svn中的修订版增加,而版本名称代表版本本身取自开发分支)。 当我希望将APPS表作为我的TESTS表的参考表时,我的问题就开始了,这意味着每个测试都会引用APPS两次,一次是测试人员,一次是测试应用程序。 我不确定在我的TESTS表中是否有一个3字段的外键(这使它成为6!)是个好主意。

有什么好的解决方案吗? 我尝试添加带有自动增量的_ID字段作为'KEY',所以我将有一个数字单个字段可以访问,但是ORM并不真正支持它,我有点咬牙试图将其拉下来。

我的Db组织不好还是我需要简单地替换ORM?我认为如果没有ORM,我可能很容易将它拉下来......

2 个答案:

答案 0 :(得分:1)

选项:

  1. APPS表中定义自动递增的主键。
  2. APPSpkgver上的vcode表格中定义复合唯一键 {{1}}列。
  3. 使用此表的主键值作为子级中的FK引用 表

答案 1 :(得分:0)

这是一个非常晚的答案,但我想提供代码来告诉peewee关于复合键,如下所示。使用此构造时,Peewee不会在表中添加“id”列:

class SillyTable(peewee.Model):
    field1 = peewee.IntegerField(null=False)
    field2 = peewee.IntegerField(null=False)
    # Composite key, no "id" column needed.
    class Meta:
        primary_key = peewee.CompositeKey('field1','field2')

我正在使用peewee v2.6.3和PyMySQL v0.6.3来访问MySQL。