我正在使用sqlite3数据库(测试花数据库:))的web2py(python))。下面是表的声明:其转化为正确的SQL中sql.log数据库字段长度未强制执行
db.define_table('flower',
Field('code', type='string', length=4, required=True, unique=True),
Field('name', type='string', length=100, required=True),
Field('description', type='string', length=250, required=False),
Field('price', type='float', required=True),
Field('photo', 'upload'));
:
CREATE TABLE flower(
id INTEGER PRIMARY KEY AUTOINCREMENT,
code CHAR(4),
name CHAR(200),
description CHAR(250),
price CHAR(5),
photo CHAR(512)
);
但是当我插入的“代码”字段,其大于4个字符的值,它仍插入。我尝试设置为CHAR(10)(简单测试,我猜)具有相同的结果。
>>>db.flower.insert(code="123456789999", name="flower2", description="test flower 2", price="5.00");
>>>1L;
同样的问题适用于我设置长度的所有字段。我也尝试过验证(虽然我不是100%正确使用它)。这也是花模型flowers.py内表的定义在哪里以及如下表声明:本
db.flower.code.requires = [ IS_NOT_EMPTY(), IS_LENGTH(4), IS_NOT_IN_DB(db, 'flower.code')]
文档为here,但我无法找到任何的限制条件的SQLite3或字符串的长度web2py的检查。我希望在插入时看到一个错误。
希望对此有所帮助吗?我在文档中错过了什么?之前我在symphony2中使用了PHP和MySQL,并且期望类似的行为。
谢谢Larry。就像我在安东尼的回答下所说:太糟糕了,我不能“接受”两者。我会写一些预插入检查来执行这个长度。太好了! –