【问题标题】:Flask+Sqlite: Strings that are integers return as type int?Flask + Sqlite:整数字符串作为int类型返回?
【发布时间】:2012-12-11 04:17:26
【问题描述】:

当我将具有整数值的内容存储为字符串时,当我检索它时,它突然变成了一个 int。

这就是我所看到的:我用这个存储

db = get_db()
hello = escape(str(request.form['name'])).striptags()
what = escape(str(request.form['content'])).striptags()
db.execute('''insert into entry (
title, content, score, approved, pub_date) values (?, ?, 0, 0,?)''',
[hello,what,int(time.time())])
raise Exception('what')
db.commit()

当我从页面提交时,例如 form['name']='1'form['content']='2'Exceptionhello==u'1'content==u'2'。到目前为止,这一切都很好。然后我存储在DB中,但是当我去检索时,突然输入类型为int12。对于任何其他字符串,一切正常,例如"lorem ispum"

在我的sql schematitlecontent 中都是string。怎么回事?

【问题讨论】:

  • 你如何检测它们是整数而不是字符串?
  • 我收到一个错误,其中函数在“int”类型上不起作用。另外,我通过引发错误打开 Flask 控制台并检查查询返回的内容,它确实是一个 int。
  • 仍然不知道答案,但我只是通过在将查询结果提供给模板之前将查询结果转换为字符串来解决问题。
  • 好的。是的,这是一种奇怪的行为,只有当数据库列类型为 INT/NUMERIC 时才会发生。

标签: python string sqlite int flask


【解决方案1】:

请注意,在 SQLite 中使用任何列类型都不能保证该列只允许存储该类型的值 - 它仍然可以存储任何类型的值。

我认为您的情况是您的列具有 INTEGER 或 NUMERIC 亲和性,在这种情况下 SQLite 通常会存储 INTEGER 类型的值。但是,如果您尝试存储无法无损转换为 INTEGER 的数据,SQLite 会自动将其转换为 TEXT。 (或者,您的列可能与 TEXT 关联,但如果它看起来像整数,Python 会以某种方式强制该字段将其存储为 INTEGER)。

您可以在 SQLite documentation 中阅读更多相关信息 - 滚动至 2.0 类型关联

【讨论】:

  • 你是对的! SQLite 根本无法识别“字符串”,所以我猜它默认为 NUMERIC 亲和力。我将架构更改为“文本”,现在它表现出正确的行为。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2012-08-04
  • 1970-01-01
  • 2017-01-03
相关资源
最近更新 更多