我正在使用SQLalchemy和sqlite开发我的第一个Pylons项目。 我想使用UUID作为我的一个表的主键。我在下面找到了问题,并使用代码向SQLalchemy添加自定义UUID()类型。 (第二个解决方案,我无法弄清楚如何使用zzzeek的建议。)
Random ids in sqlalchemy (pylons)
然而,当我试一试时,我得到ValueError('bytes不是16-char字符串') 我怀疑这与我试图将此UUID存储在sqlite VARCHAR类型字段中这一事实有关。 有谁知道我应该在sqlite中使用哪种类型的字段,这些字段适用于来自SQLalchemy的这些UUID?
谢谢, 埃里克
答案 0 :(得分:6)
你是对的,这只是为postgresql工作(db我用)。 但我在你提供Random ids in sqlalchemy (pylons)的帖子中潜水,它确实在sqlite中工作,只是不遵循zzzeek的回答 转到Tom Willis解决方案,只需要考虑一些事情我遵循完成此代码但改变一些事情: 逐行:
#I delete follow line:
from sqlalchemy.databases.mysql import MSBinary
因为在sqlalchemy 0.6中它是dialects.sqllite但我没有使用它 我用的是:
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)
)
答案 1 :(得分:1)
sqlite
模块期望在文本字段中使用unicode
数据(在存储到数据库之前将其编码为UTF-8)。您可以通过将值括在buffer()
调用中来发送二进制数据。