python sqlite3 pickle类型列具有默认值

时间:2015-01-24 04:21:05

标签: python sqlalchemy

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

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

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

create table test (value BLOB default b'\x80\x03]q\x00(K\x01K\x02K\x03e.')
## obviously this is not working.

我知道解决方案是使用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列设置默认值,我该怎么办?

1 个答案:

答案 0 :(得分:1)

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')