如何连接 blob?
How can I concatenate blobs?
有没有办法在使用 GROUP BY 时聚合 sqlite 中两条记录的 BLOB(二进制)。
已经试过没有成功:
1) GROUP_CONCAT 来自 sqlite 文档的函数,但它不适用于 BLOB 数据类型,它 returns 只有 1 个字节,即使 2 个 BLOB 比那个大。
SELECT id, GROUP_CONCAT(blob_col)
FROM table
GROUP BY id
2) 通过 Python Sqlite3 "create_aggregate" 函数
定义自己的 SQL 函数
import sqlite3
class BlobConcat:
def __init__(self):
self.count = buffer("")
def step(self, value):
print str(value)
self.count += value[:]
def finalize(self):
return self.count
con = sqlite3.connect(dbPath)
con.create_aggregate("BLOB_CONCAT", 1, BlobConcat)
sql = """SELECT id, BLOB_CONCAT(blob_col)
FROM table
GROUP BY id"""
也只返回 1 个字节。
SQLite 没有用于连接 blob 的内置机制。
您可以 编写一个用户定义的函数(聚合或不聚合)来执行此操作。
class 的问题是 return self.count
returns 一个 str
对象,它被解释为字符串,而不是 blob。您必须明确地将其转换为缓冲区:
class BlobConcat:
...
def finalize(self):
return buffer(self.count)
有没有办法在使用 GROUP BY 时聚合 sqlite 中两条记录的 BLOB(二进制)。
已经试过没有成功:
1) GROUP_CONCAT 来自 sqlite 文档的函数,但它不适用于 BLOB 数据类型,它 returns 只有 1 个字节,即使 2 个 BLOB 比那个大。
SELECT id, GROUP_CONCAT(blob_col)
FROM table
GROUP BY id
2) 通过 Python Sqlite3 "create_aggregate" 函数
定义自己的 SQL 函数import sqlite3
class BlobConcat:
def __init__(self):
self.count = buffer("")
def step(self, value):
print str(value)
self.count += value[:]
def finalize(self):
return self.count
con = sqlite3.connect(dbPath)
con.create_aggregate("BLOB_CONCAT", 1, BlobConcat)
sql = """SELECT id, BLOB_CONCAT(blob_col)
FROM table
GROUP BY id"""
也只返回 1 个字节。
SQLite 没有用于连接 blob 的内置机制。
您可以 编写一个用户定义的函数(聚合或不聚合)来执行此操作。
class 的问题是 return self.count
returns 一个 str
对象,它被解释为字符串,而不是 blob。您必须明确地将其转换为缓冲区:
class BlobConcat:
...
def finalize(self):
return buffer(self.count)