我想在使用SQLAlchemy 1.1.5的Postgresql数据库中有一个uuid类型的主键id,它使用pg8000适配器连接到数据库。我使用了SQLAlchemy文档中的Backend-agnostic GUID Type recipe。
当我想插入数据库时,我得到以下错误
File ".../guid.py", line ???, in process_result_value
return uuid.UUID(value)
File "/usr/lib/python2.7/uuid.py", line 131, in __init__
hex = hex.replace('urn:', '').replace('uuid:', '')
AttributeError: 'UUID' object has no attribute 'replace'
我的模特像这样
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from guid import GUID
import uuid
base = declarative_base()
class Item(base):
__tablename__ = 'item'
id = Column(GUID(), default=uuid.uuid4, nullable=False, unique=True, primary_key=True)
name = Column(String)
description = Column(String)
def __repr__(self):
return "<Item(name='%s', description='%s')>" % (self.name, self.description)
我的资源或控制器如下所示
data = req.params
item = Item(name=data['name'], description=data['description'])
self.session.add(item)
self.session.commit()
这应该可以解决它:
来自https://bitbucket.org/zzzeek/sqlalchemy/issues/3323/in-099-uuid-columns-are-broken-with:
当跨系统使用uuid时,这会相当令人沮丧。在某些情况下,很难控制UUID是作为字符串还是作为原始UUID传入。为了解决这个问题,像这样的解决方案可能会奏效。我附上了医生的例子,以确保其他一切都是正确的。
请自行决定,这只是一个例子。
PostgreSQL数据库适配器正在返回一个} method 。
uuid.UUID()
对象(请参阅它们的type mapping documentation,SQLAlchemy已将其传递给^{然而,文档中给出的实现需要一个字符串,因此失败:
快速解决方法是强制该值为字符串:
或者可以先测试类型:
我提交了pull request #403以在文档中修复此问题(自合并后)。
相关问题 更多 >
编程相关推荐