SqlAlchemy:如何在 mysql 中创建 LONGBLOB 列?

问题描述 投票:0回答:3

将 sqlalchemy 与 mysql-python 结合使用,我有这个表:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Index, LargeBinary
Base = declarative_base()
class Tbl(Base):
     __tablename__ = 'tbl'
     ...
     data = Column(LargeBinary())

但是,当我创建这个表(使用

Base.metadata.create_all(engine)
),然后在mysql中使用
DESCRIBE tbl;
时,我得到了这个:

mysql> describe logs;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
...
| data         | blob        | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

预期结果:我希望这是mysql中的

longblob
,而不是限制为64kB的
blob

python mysql sqlalchemy
3个回答
20
投票

使用:

data = Column(LargeBinary(length=(2**32)-1))

导致 LargeBinary 创建

longblob
类型


5
投票

作为开发者对错误报告的回应 LargeBinary类型在Mysql中创建LongBlob失败并创建Blob指出:

如果您的问题只是能够渲染 LONGBLOB,而不是 对于 LargeBinary 默认的 BLOB 存在分歧,您当然可以使用 直接使用 sqlalchemy.dialects.mysql.LONGBLOB 类型。如果你想 将此与您可以使用的通用 LargeBinary 结合起来 LargeBinary().with_variant(LONGBLOB, "mysql")


0
投票

因为我们在 sqlalchemy 方言中有

MEDIUMBLOB
,您可以将其用于 MySQL:

from sqlalchemy.dialects.mysql import MEDIUMBLOB,LONGBLOB,TINYBLOB
data = Column(LONGBLOB)
© www.soinside.com 2019 - 2024. All rights reserved.