如何在 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 中定义自定义主键的主要内容,如果未能解决你的问题,请参考以下文章

如何设置主键自增从1000开始每次自增1

mysql的设置主键自增

mycat 主键自增问题

mysql如何设置自增主键

JAVA中JPA的主键自增长注解设置

mysql的设置主键自增的问题