python sqlite3 pickle类型列具有默认值

2024-09-20 22:57:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我们知道在数据库系统中(在我的例子中,我们使用sqlite3),我们可以使用BLOB类型(二进制)或文本类型来存储任何可pickle对象。在

data = [1,2,3] # b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
create table test (value BLOB)
cursor.execute("insert into test values (?)", (pickle.dumps(data),)
## this works

但是如果我们想为列设置一个默认值呢? 例如

^{pr2}$

我知道一个解决方案是使用base64

## because we know base64.b64encode(pickle.dumps([1,2,3])) =
## 'gANjYnVpbHRpbnMKc2V0CnEAXXEBKEsBSwJLA2WFcQJScQMu'
## so we can use:
create table test (value BLOB default 'gANjYnVpbHRpbnMKc2V0CnEAXXEBKEsBSwJLA2WFcQJScQMu')

但据我所知,在SqlAlchemy PickleType中,它们没有使用base64编码。因为这需要额外的时间。在

任何人都知道如果我们想为pickletype列设置一个默认值,我该怎么做?在


Tags: test类型datavaluecreatetablesqlite3blob
1条回答
网友
1楼 · 发布于 2024-09-20 22:57:26

sqlite使用“x”或“x”作为BLOB字符串文本(https://www.sqlite.org/lang_expr.html#hexint)的前缀,因此 b'\x80\x03]q\x00(K\x01K\x02K\x03e.'不起作用。这应该:

create table test (value BLOB default X'80035d7100284b014b024b03652e')

相关问题 更多 >

    热门问题