gpt4 book ai didi

python - 数据库字段长度不强制

转载 作者:行者123 更新时间:2023-12-01 04:39:48 24 4
gpt4 key购买 nike

我正在使用 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 个字符的“code”字段值时,它仍然会插入。我尝试设置为 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 一起使用,并期望这里有类似的行为。

最佳答案

SQLite 与其他数据库不同。对于所有(大多数)实际用途,列都是无类型的,并且 INSERT 始终会成功并且不会丢失数据或精度(这意味着,如果需要,您可以将文本值插入到 REAL 字段中)。

列的声明类型用于称为“类型亲和性”的系统,其描述如下:https://www.sqlite.org/datatype3.html .

一旦你习惯了它,它会很有趣 - 但绝对不是你所期望的!

在发出 INSERT 之前,您必须在代码中执行长度检查。

关于python - 数据库字段长度不强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30967179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com