2017-08-10 52 views
1

有没有办法在使用GROUP BY时聚合sqlite中两条记录的BLOB(二进制)。如何连接blob?

已经尝试过withouth的成功:

1)从SQLite的文档GROUP_CONCAT功能,但它并不适用于BLOB数据类型的工作,它只返回1,即使2分的BLOB明显高于大字节。

SELECT id, GROUP_CONCAT(blob_col) 
FROM table 
GROUP BY id 

2)通过Python SQLITE3 “create_aggregate” 功能

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个字节定义自己的SQL函数。

回答

1

SQLite没有内置的连接blob的机制。

可以写一个用户定义的函数(聚合与否)来做到这一点。 您的课程存在的问题是return self.count返回str对象,该对象被解释为字符串而不是blob。你必须明确地将它转换成缓冲区:

class BlobConcat: 
    ... 
    def finalize(self): 
     return buffer(self.count) 
+0

不错,谢谢! – Hangon