如何将Python十进制转换为SQLite数字?

我有一个程序,它以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'>
上一篇:在C/C++中快速实现/逼近pow()函数


下一篇:5.4.1. Check Constraints