Използвам 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 в sql.log:
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')]
Документация за това е тук, но не мога да намеря нищо, което ограничава проверката на дължината на SQLite3 или web2py на низа. Очаквам да видя грешка при вмъкване.
Бихте ли оценили малко помощ по този въпрос? Какво съм пропуснал в документацията? Използвах symphony2 с PHP и MySQL преди и бих очаквал подобно поведение тук.