【问题标题】:Does web2py absolutely require a sequentially numbered id column in database tablesweb2py 是否绝对需要在数据库表中按顺序编号的 id 列
【发布时间】:2016-06-28 21:04:45
【问题描述】:

我有一个由 web2py 访问的 mySQL 数据库,但有一个表(它有一个标记为“id”的自动增量列),它也经常被另一个脚本更改。这个脚本经常删除和插入新行到表中,所以虽然'id'列中的整数是唯一的并且是升序的,但也有很多中间数缺失。这会在未来导致 web2py 问题吗?

请注意,我只通过不同的列访问此表,该列包含一组不同的唯一标识符,所以我根本不需要“id”列:它只是在那里,因为文档声明 web2py 需要它.

【问题讨论】:

    标签: database auto-increment web2py


    【解决方案1】:

    在 id 字段中缺少值不会以任何方式影响 web2py。但是在 web2py 中编辑此记录时删除或更改记录的 ID 会导致错误。所以请注意您的 web2py 用户在脚本更改/删除 ID 期间没有编辑记录。

    【讨论】:

    • 完美,谢谢。在这种情况下,web2py 只能读取该表,所以应该没问题。
    • 另外,请注意“中间数字缺失”是 web2py DAL id 字段的标准,因为它们是每个数据库实现的标准自动递增整数字段——因此预计当记录被删除,序列中会有间隙。 web2py 只需要一个唯一的整数主键字段,其值将由数据库自动填充(实际上没有任何要求值是连续的)。
    • 非常感谢@Anthony。在 web2py 文档中的某处注意这一点可能很有用。我在任何地方都找不到明确说明没有严格要求 id 编号是连续的,尽管我怀疑它可能在某些时候暗示过。
    • 文档简单地说,“默认情况下,每个表都有一个名为 'id' 的字段。它是一个自动递增的整数字段(从 1 开始),用于交叉引用并使每条记录唯一,所以 'id' 是主键。”我不认为它在任何地方都说所有记录 id 必须始终保持完美的顺序,没有间隙,因为这没有意义,也不是自动递增整数字段的工作方式。
    【解决方案2】:

    接受的答案是正确的,但还要注意,根据您的用例,您可能根本不需要表中的自动递增整数 id 字段,因为 DAL 可以通过primarykey 参数为 db.define_table()。特别是,如果您正在使用只读表,并且任何引用都指向/来自其他键控表,则不需要 id 字段。详情请见http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Legacy-databases-and-keyed-tables

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2021-10-10
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多