【发布时间】:2011-10-21 02:10:24
【问题描述】:
我正在使用 YAML 和 SQLAlchemy。我定义了我的对象,我可以使用 YAML 来打印它就好了。但是,当我尝试对从 SQLAlchemy 查询返回的对象使用 YAML 时,它失败并出现错误 can't pickle int objects。我打印出从 SQLAlchemy 返回的实例,它显示了正确的类型。我让代码来说话:
class HashPointer(Base):
__tablename__ = 'hash_pointers'
id = Column(Integer, primary_key=True)
hash_code = Column(VARBINARY(64), unique=True)
file_pointer = Column(Text)
def __init__(self, hash_code, file_pointer):
self.hash_code = hash_code
self.file_pointer = file_pointer
def __repr__(self):
return "<HashPointer('%s', '%s')>" % (self.hash_code, self.file_pointer)
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
Engine = create_engine("mysql://user:pass@localhost/db", echo=True)
Session = sessionmaker(bind=Engine)
session = Session()
fhash = HashPointer(0x661623708235, "c:\\test\\001.txt")
# PRINTS FINE
print(yaml.dump(fhash))
for instance in session.query(HashPointer).all():
# PRINTS FINE AS __repr__
print instance
# THROWS ERROR, 'CAN'T PICKLE INT OBJECTS'
print(yaml.dump(instance))
【问题讨论】:
-
“实例”的类型是什么? yaml.dump(10) 工作正常,所以我可能是没有所需酸洗方法的 SQLAlchemy 类型(即本身返回可酸洗类型的 reduce 方法)。跨度>
标签: python sqlalchemy yaml pickle