sqlalchemy core:执行多个语句会产生StatementError,memoryview错误

时间:2015-07-24 20:08:41

标签: python sqlalchemy

我正在尝试使用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

为什么这样做?

1 个答案:

答案 0 :(得分:1)

如SQLAlchemy IRC频道所述,这是因为unicode。 Python3字符串是一个unicode字符串;如果要使用BLOB类型,则需要使用字节对象或支持缓冲区协议的其他对象。

SQLAlchemy还为大型unicode字符串提供UnicodeText类型。

NullType"工作"因为SQLAlchemy只是直接传递它并信任数据库驱动程序用它做正确的事情,显然它在这种情况下。