我有一个程序,它以JSON格式读取财务数据并将其插入到SQLite数据库中.问题是当我将它插入SQLite数字列时,它似乎不喜欢decimal对象.
我已经找到了这个问题answered before,但答案已经过时,据我所知,SQLite现在有货币数据类型called numeric.
现在作为一种解决方法我将十进制值存储为文本,但是可以将其存储为数字吗?我是否坚持将小数转换为字符串的开销,反之亦然,以便进行数据库插入和财务计算?
解决方法:
sqlite3允许您注册适配器(在插入时透明地将十进制转换为TEXT)和转换器(在获取时透明地将TEXT转换为十进制).
以下是the docs中示例代码的轻微修改版本:
import sqlite3
import decimal
D=decimal.Decimal
def adapt_decimal(d):
return str(d)
def convert_decimal(s):
return D(s)
# Register the adapter
sqlite3.register_adapter(D, adapt_decimal)
# Register the converter
sqlite3.register_converter("decimal", convert_decimal)
d = D('4.12')
con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cur = con.cursor()
cur.execute("create table test(d decimal)")
cur.execute("insert into test(d) values (?)", (d,))
cur.execute("select d from test")
data=cur.fetchone()[0]
print(data)
print(type(data))
cur.close()
con.close()
产量
4.12
<class 'decimal.Decimal'>