【问题标题】:SQLite does not check Data TypesSQLite 不检查数据类型
【发布时间】:2017-11-01 09:35:14
【问题描述】:

尊敬的 Stack Overflow 社区,

我第一次尝试数据库设计时遇到了一点问题。

我尝试制作某种表格并尝试检查基本功能;使用 Python3 和 SQLite3 编写。

我的问题很简单,我有几行:

cur.execute('CREATE TABLE IF NOT EXISTS test(a INTEGER, argument DATE)')

现在我可以写了:

cur.execute('insert into test (a, argument) values (?,?)', "bla", "blabla")

没有收到错误消息;当您在CREATE TABLE 语句中定义允许的数据类型时,该命令不应该被 SQL 自动禁止吗?

完整代码在这里:http://codepad.org/kf4gZB7m

【问题讨论】:

  • 欢迎来到 SO,用问题中的代码更新您的问题

标签: python sqlite sqldatatypes


【解决方案1】:

这是一项功能,而不是错误。 SQLite 使用动态类型。见https://sqlite.org/faq.html#q3

【讨论】:

  • 好的,谢谢您的回答!此功能是否与某些性能损失或更高的内存消耗有关?如果是,有没有办法禁用此功能?
  • 不知道内存消耗,但肯定没有办法让 SQLite 更严格的类型。你需要一个不同的 SQL 实现。
  • SQLite 通常使用更少的内存并且比其他数据库更快,但是比较嵌入式和客户端/服务器数据库并没有真正意义。如果你真的需要,可以add manual checks
  • 这是一个非常糟糕的功能。至少应该有一种方法可以打开正确的类型检查。 :-/
【解决方案2】:

此功能是类型相似性

使用严格类型的 SQL 数据库引擎通常会尝试 自动将值转换为适当的数据类型。这 这里的重要思想是该类型是推荐的,而不是必需的。

文档:https://sqlite.org/datatype3.html#affinity

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多