Python Web2Py:如何停止删除引用的表?

Python Web2Py:如何停止删除引用的表?,python,database,sqlite,web2py,Python,Database,Sqlite,Web2py,我正在设计一个应用程序,它通过在每次保存时对用户数据进行备份来跟踪用户数据,以便用户可以恢复到旧版本。以下是我设置表定义的方式: db.define_table('Menu', Field('title', 'string', unique=True), Field('ver', 'float', readable=False, writable=False), Field('menu', 'text', requires=IS_NOT_EMPTY()), format='%(t

我正在设计一个应用程序,它通过在每次保存时对用户数据进行备份来跟踪用户数据,以便用户可以恢复到旧版本。以下是我设置表定义的方式:

db.define_table('Menu',
  Field('title', 'string', unique=True),
  Field('ver', 'float', readable=False, writable=False),
  Field('menu', 'text', requires=IS_NOT_EMPTY()),
  format='%(title)s'
)
db.define_table('Backups',
  Field('menu_ref', 'reference Menus', ondelete='SET NULL'),
  Field('title', 'string'),
  Field('ver', 'float'),
  Field('date_ref', 'datetime', default=datetime.utcnow(), readable=False, writable=False, label='Date'),
  Field('menu', 'text'),
  Field('user_ref', 'reference auth_user', default=auth.user_id, writable=False, readable=False),
  format='%(menu_ref.title)s'+' v.%(ver)s'
)
我遇到了一个问题,每次删除菜单时,它都会删除引用它的所有备份。我看到解决这个问题的标准方法是将ondelete参数设置为“SET NULL”,但这不起作用。我还尝试将备份中的menu_ref类型更改为“integer”,并让它引用menu中的正确id,但出于某种原因,它仍然删除所有相关行。有人知道你该怎么阻止这一切吗

我现在正在使用SQLLite来测试我的应用程序,但如果相关的话,它将被转移到GoogleAppEngine


提前感谢。

如果您在第一次创建表时没有
ondelete='SET NULL'
,您可能需要删除并重新创建表,或者手动更改删除时的
操作,因为这种更改可能不会通过web2py迁移自动进行。

如果您在第一次创建表时没有
ondelete='SET NULL'
,您可能必须删除并重新创建表,或者手动更改
ON DELETE
操作,因为这种更改可能不会通过web2py迁移自动进行。正是这样。在删除表并重新创建它们之后,所有引用都不再被删除。谢谢你,安东尼。你能把这个作为一个答案再贴出来吗?我会接受它,这样你就可以得到学分了?