使用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这样的字符串而不进行转换。我怎么能这样做?
答案 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)')