为什么#### e #####形式的字符串在插入sqlite数据库时会转换为float?

时间:2016-10-24 20:56:16

标签: python database sqlite

使用sqlite数据库和python时,我遇到以下问题。 这也发生在SQLiteStudio等外部程序中,所以它不是python。 假设有一个包含string类型列的表。 如果输入该列的条目,例如43234e4324(因此,#### e #####类型的所有条目都给出了问题),则存储在数据库中的值将转换为inf! 当然,因为e可能被解释为指数,所以如果列的类型为float,则它是有意义的,但它是字符串!

这是一个有效的例子:

import sqlite3
a = sqlite3.connect('test.sqlite')
a.execute('CREATE TABLE test (p STRING)')
a.execute('INSERT INTO test (p) VALUES (03242e4444)')
a.commit()
b = a.execute('SELECT p FROM test')
b.fetchall()

你得到[(inf,)] ...... 如果您插入不同的值而没有' e'你会得到正确的字符串。

我想输入一个像43243e3423这样的字符串而不进行转换。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

其中e的数字是exponential notation中的浮点数。 43234e3423是43234x10 3423 的表示法。由于它太大而无法存储为浮点数,因此您得到inf

要输入字符串,您应该将它们放在引号中。

a.execute('INSERT INTO test (p) VALUES ("03242e4444")')

另一个问题是没有STRING数据类型。无法识别的数据类型被视为NUMERIC,因此即使您在值周围加上引号,它也会被转换为数字。请改用TEXT

a.execute('CREATE TABLE test (p TEXT)')