【发布时间】:2015-06-21 17:11:22
【问题描述】:
我正在使用 web2py (python) 和 sqlite3 数据库(测试花数据库:))。这是表的声明:
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'));
在 sql.log 中转换为正确的 SQL:
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 字符串长度检查的东西。我希望在插入时看到错误。
在这方面需要一些帮助吗?我在文档中遗漏了什么?我之前在 PHP 和 MySQL 中使用过 symphony2,并且预计会出现类似的行为。
【问题讨论】: