我正在使用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()
调用中封装值来发送二进制数据。