如何在web2py中定义自定义主键

时间:2014-09-04 20:49:12

标签: sql database primary-key web2py data-access-layer

我正在web2py中构建一个简单的应用程序,它将用于使用基于Web的表单在表中存储一些数据。

以下代码是与下拉菜单相关的表的示例。

#########################################################################
## Conglomerado_tenencia_opcion
db.define_table('Conglomerado_tenencia_opcion',
            Field('num_tenencia','integer', required='TRUE'),
            Field('nombre_tenencia', 'text', required='TRUE'))

if db(db.Conglomerado_tenencia_opcion.id>0).count() == 0:
db.Conglomerado_tenencia_opcion.insert(num_tenencia='1',nombre_tenencia='Ejidal')
db.Conglomerado_tenencia_opcion.insert(num_tenencia='2',nombre_tenencia='Comunal')
db.Conglomerado_tenencia_opcion.insert(num_tenencia='3',nombre_tenencia='Propiedad particular')
db.Conglomerado_tenencia_opcion.insert(num_tenencia='4',nombre_tenencia='Propiedad federal')

然而,这个应用程序将传递给几个同事,因此当尝试收集他们将单独收集的所有信息时,自动生成的ID可能会出现问题。

我想将字段'num_tenencia'声明为主键,但显然web2py不允许它,因为必须自动生成主键。正如您在上面的代码中所看到的,'num_tenencia'对每条记录都是唯一的。

¿有人知道这方面的解决方案吗?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

db.define_table('Conglomerado_tenencia_opcion',
    Field('num_tenencia','integer', required=True),
    Field('nombre_tenencia', 'text', required=True),
    primarykey=['num_tenencia'])

但是,不建议这样做,因为它限制了某些web2py功能(有关详细信息,请参阅keyed tables上的书籍部分)。

在任何情况下,即使你设置了自己的主键,如果不同版本的应用程序将在不同的系统上运行,你仍然需要提出一个方案来确保系统之间没有重复(也许是uuid的)。

作为替代方案,您可能最好创建一个工作流来组合来自不同数据库的数据。实际上,web2py文档仅为这样的工作流程提供了recipe