2017-08-10 48 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