web2py: FOREIGN KEY 约束在不应该的时候失败了
web2py: FOREIGN KEY constraint failed when it shouldn't
我有这个table:
db.define_table('block',
Field('ore_id', 'reference ore'),
Field('location', type='integer', required=True, notnull = True),
Field('x', type='integer'),
Field('y', type='integer'),
Field('block_mass_tn', type='double')
)
还有这个:
db.define_table('block_processing_line_1',
Field('block_location', 'reference block'),
Field('processing_time_d', type='double'),
Field('concentrate_tn', type='double'),
Field('concentrate_quality', type='double')
)
在 table block
我有 100 个条目,id
和 location
运行 从 1-100。当我向后者 table 添加一条新记录且 block_location
为 1 时,它会接受它,但是当我尝试添加 2 或 3 等时,它不会接受它并显示 "FOREIGN KEY constraint failed"。我还有其他 tables,它们具有相同的字段:Field('block_location', 'reference block'),
但它们对大于 1 的值没有任何问题。这里有什么问题?
我想到的另一件事是我之前遇到过同样的问题 table 我意识到我打错了字:Field('block_location', 'reference ore'),
所以我引用了一个错误的 table 并且 table ore
只有一个条目(因此只接受 1 而没有其他)。但是现在即使我修复了它,问题仍然存在。在 DAL 的某处是否可以找到那条前线的痕迹?我在修复后截断了 tables(block
和 block_processing_line_1
。
@安东尼:
Have you compiled the app or turned off migrations? If neither, maybe
try dropping the block_processing_line_1 table.
这就解决了!我删除了 table 并保存,"undropped" 删除了 table 并保存,之后它就可以正常工作了。所以这一行:
db.block_processing_line_1.drop()
我有这个table:
db.define_table('block',
Field('ore_id', 'reference ore'),
Field('location', type='integer', required=True, notnull = True),
Field('x', type='integer'),
Field('y', type='integer'),
Field('block_mass_tn', type='double')
)
还有这个:
db.define_table('block_processing_line_1',
Field('block_location', 'reference block'),
Field('processing_time_d', type='double'),
Field('concentrate_tn', type='double'),
Field('concentrate_quality', type='double')
)
在 table block
我有 100 个条目,id
和 location
运行 从 1-100。当我向后者 table 添加一条新记录且 block_location
为 1 时,它会接受它,但是当我尝试添加 2 或 3 等时,它不会接受它并显示 "FOREIGN KEY constraint failed"。我还有其他 tables,它们具有相同的字段:Field('block_location', 'reference block'),
但它们对大于 1 的值没有任何问题。这里有什么问题?
我想到的另一件事是我之前遇到过同样的问题 table 我意识到我打错了字:Field('block_location', 'reference ore'),
所以我引用了一个错误的 table 并且 table ore
只有一个条目(因此只接受 1 而没有其他)。但是现在即使我修复了它,问题仍然存在。在 DAL 的某处是否可以找到那条前线的痕迹?我在修复后截断了 tables(block
和 block_processing_line_1
。
@安东尼:
Have you compiled the app or turned off migrations? If neither, maybe try dropping the block_processing_line_1 table.
这就解决了!我删除了 table 并保存,"undropped" 删除了 table 并保存,之后它就可以正常工作了。所以这一行:
db.block_processing_line_1.drop()