如何在 web2py 中定义自定义主键
Posted
技术标签:
【中文标题】如何在 web2py 中定义自定义主键【英文标题】:How can I define a custom primary key in web2py 【发布时间】:2014-10-29 18:00:43 【问题描述】:我正在 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】:你可以这样做:
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。
【讨论】:
以上是关于如何在 web2py 中定义自定义主键的主要内容,如果未能解决你的问题,请参考以下文章