我正在尝试使用sqlalchemy核心填充一个名为puppies的表。这是表定义:
puppies = Table('puppies', metadata,
Column('name', String),
Column('date_of_birth', types.DateTime),
Column('breed', String),
Column('gender', String),
Column('weight', Integer),
Column('pic', types.Blob), ## This is the problem
Column('shelter_id', Integer, ForeignKey('shelters.id'))
)
以下是错误日志
Error:
return DBAPIBinary(value)
sqlalchemy.exc.StatementError: memoryview: str object does not have the buffer interface (original cause: TypeError: memoryview: str object does not have the buffer interface)
python:3.4 sqlalchemy:0.9
这个错误与字节串有关吗?
解决方案:将types.Blob更改为types.NullType
为什么这样做?
答案 0 :(得分:1)
如SQLAlchemy IRC频道所述,这是因为unicode。 Python3字符串是一个unicode字符串;如果要使用BLOB类型,则需要使用字节对象或支持缓冲区协议的其他对象。
SQLAlchemy还为大型unicode字符串提供UnicodeText类型。
NullType"工作"因为SQLAlchemy只是直接传递它并信任数据库驱动程序用它做正确的事情,显然它在这种情况下。