使用Pylons和SQLalchemy在sqlite中存储uuid



我正在使用SQLalchemy和sqlite进行我的第一个Pylons项目。我想使用uuid作为其中一个表的主键。我找到了下面的问题,并使用代码向SQLalchemy添加了一个自定义UUID()类型。(第二个解决方案,我不知道如何使用zzzeek的建议。)

sqlalchemy (pylons)中的随机id

然而,当我尝试它,我得到ValueError('字节不是一个16字符的字符串')我怀疑这与我试图将这个UUID存储在sqlite VARCHAR类型字段中有关。有人知道我应该在sqlite中使用什么类型的字段来处理SQLalchemy中的这些uuid吗?

谢谢,Erik

你是对的,这只是工作的postgresql (db我使用)。但是我潜入了你在sqlalchemy (pylons)中提供随机id的帖子,它在sqlite中确实有效,只是不要遵循zzzeek的答案去汤姆威利斯解决方案,只是一些事情要考虑我遵循完整的代码,但改变了一些东西:逐行:

#I delete follow line:
from sqlalchemy.databases.mysql import MSBinary

因为在sqlalchemy 0.6中它是方言。但我不用它我使用:

from sqlalchemy.types import Binary

只需更改UUID类中的后续行:

class UUID(types.TypeDecorator):
    impl = Binary # this one!
...
...
id_column_name = "id"
def id_column():
    import uuid
    return Column(id_column_name,UUID(),primary_key=True,default=uuid.uuid4)

#usage:
app_uuid = Column(u'app_uuid', UUID(), primary_key=True)

这对我来说很有效,祝你好运!

<标题>之前回答
user = Table(
    'User',
    meta.metadata,
    Column('ID', UUID(as_uuid=True), primary_key=True),
    Column('Name', String(250), nullable=False, unique=True)
)

sqlite模块期望使用unicode数据(在存储在数据库中之前将其编码为UTF-8)用于文本字段。您可以通过在buffer()调用中封装值来发送二进制数据。

最新更新