【问题标题】:How can I define a custom primary key in web2py如何在 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”对于每条记录都是唯一的。

¿有人知道这个问题的解决方案吗?

【问题讨论】:

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


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      相关资源
      最近更新 更多