Peewee CompressedField 在 MySQL db 上被截断
Peewee CompressedField gets truncated on MySQL db
我将 Peewee 与 PyMySQL 一起使用,但在尝试使用 playhouse
模块中的 CompressedField
时卡在了 64k blob
大小...
以下代码为我提供了第二次测试的截断数据
from peewee import *
from playhouse.db_url import connect
from playhouse.fields import CompressedField
db = connect("mysql://me:pass@IP/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()
我尝试在 MySQL 和 pymysql 中将 'max_allowed_packet'
更新为 1073741824
但这并没有改变任何东西。
顺便说一下,我认为这是同样的问题,将 long_str
与 PickledField
一起使用会给我一个损坏的管道错误。
有没有办法让 peewee 与 longblob
一起工作? (或者问题是否来自其他地方?)
我还找到了一个 thread on the broken pipe problem with pymysql,但我不知道如何告诉 Peewee 模型在那个特定字段上做大块的东西...
这可以通过 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()
我将 Peewee 与 PyMySQL 一起使用,但在尝试使用 playhouse
模块中的 CompressedField
时卡在了 64k blob
大小...
以下代码为我提供了第二次测试的截断数据
from peewee import *
from playhouse.db_url import connect
from playhouse.fields import CompressedField
db = connect("mysql://me:pass@IP/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()
我尝试在 MySQL 和 pymysql 中将 'max_allowed_packet'
更新为 1073741824
但这并没有改变任何东西。
顺便说一下,我认为这是同样的问题,将 long_str
与 PickledField
一起使用会给我一个损坏的管道错误。
有没有办法让 peewee 与 longblob
一起工作? (或者问题是否来自其他地方?)
我还找到了一个 thread on the broken pipe problem with pymysql,但我不知道如何告诉 Peewee 模型在那个特定字段上做大块的东西...
这可以通过 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()