2017-08-10 6 views
1

existe-t-il un moyen d'agréger BLOB (binaire) de deux enregistrements dans sqlite, lors de l'utilisation d'un GROUP BY.Comment concaténer des blobs?

déjà essayé withouth succès:

1) Fonction GROUP_CONCAT de sqlite Documentation, mais il ne fonctionne pas pour le type de données BLOB, il retourne seulement 1 octet même si les 2 étaient plus grandes que BLOBs cela.

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

2) Définition propre fonction SQL via la fonction Python Sqlite3 "de 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""" 

retour également seulement 1 octet.

Répondre

1

SQLite n'a pas de mécanisme intégré pour concaténer les blobs.

Vous pouvez écrire une fonction définie par l'utilisateur (agrégée ou non) pour ce faire. Le problème avec votre classe est que return self.count renvoie un objet str, qui est interprété comme une chaîne et non comme un objet BLOB. Vous devez le convertir explicitement en tampon:

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

bien, merci! – Hangon