2016-03-24 4 views
2

Ich verwende Peewee mit PyMySQL und ich bin immer auf der 64k blob Größe stecken, wenn die CompressedField vom playhouse Modul zu verwenden versuchen ...Peewee CompressedField wird abgeschnitten auf MySQL db

Der folgende Code gibt mir abgeschnittene Daten für den zweiten Test

from peewee import * 
from playhouse.db_url import connect 
from playhouse.fields import CompressedField 

db = connect("mysql://me:[email protected]/test_db") 

class Compress(Model): 
    name = CharField() 
    cmprssd_data = CompressedField() 

    class Meta: 
     database = db 

db.connect() 
db.create_tables([Compress], safe=True) 

short_str = "".zfill(200) 
di_test1 = {"name": "first", "cmprssd_data": short_str } 
test1 = Compress(**di_test1) 
test1.save() 

long_str = "".zfill(200000000) 
di_test2 = {"name": "second", "cmprssd_data": long_str } 
test2 = Compress(**di_test2) 
test2.save() 

ich versuchte 'max_allowed_packet'-1073741824 sowohl MySQL und pymysql modernisiert werden, aber das hat nichts ändern. By the way, wie ich denke, es ist das gleiche Problem, die Verwendung der long_str mit einer PickledField gibt mir einen gebrochenen Rohrfehler.

Gibt es eine Möglichkeit, Peewee mit longblob zu arbeiten? (oder kommt das Problem von woanders?) Ich fand auch eine thread on the broken pipe problem with pymysql, aber ich weiß nicht, wie man einem Peewee-Modell sagt, das Brocken Zeug auf diesem spezifischen Feld zu tun ...

Antwort

0

Dies kann mit durchgeführt werden a custom field:

from peewee import * 
from playhouse.fields import CompressedField 

# tell database that the longblob column type exists 
db = MySQLDatabase('test', host='127.0.0.1', user='root', 
        fields={'longblob': 'longblob'}) 


# create a custom field, in this case subclassing the existing field 
class LongCompressedField(CompressedField): 
    db_field = 'longblob' # <-- this matches our dictionary key above 


class MyModel(Model): 
    val = LongCompressedField() 

    class Meta: 
     db_table = 'test' 
     database = db 


db.connect() 
db.create_table(MyModel, safe=True) 

m = MyModel(val=''.zfill(200000000)) 
m.save() 
+0

Das funktioniert perfekt, vielen Dank! – Silmathoron