使用Pylons和SQLalchemy在sqlite中存储UUID

Eri*_*aal 3 python sqlite pylons sqlalchemy

我正在使用SQLalchemy和sqlite开发我的第一个Pylons项目.我想使用UUID作为我的一个表的主键.我在下面找到了问题,并使用代码向SQLalchemy添加自定义UUID()类型.(第二个解决方案,我无法弄清楚如何使用zzzeek的建议.)

sqlalchemy(塔)中的随机ID

但是,当我尝试它时,我得到ValueError('字节不是16个字符串')我怀疑这与我试图将这个UUID存储在sqlite VARCHAR类型字段中这一事实有关.有谁知道我应该在sqlite中使用哪种类型的字段,这些字段适用于来自SQLalchemy的这些UUID?

谢谢,Erik

Rob*_*con 6

你是对的,这只是为postgresql工作(db我用).但我在后潜入你提供在SQLAlchemy的随机IDS(塔),它真的在sqlite的工作,只是不按zzzeek答案转到汤姆·威利斯的解决方案,只是有些事情需要考虑我按照这个完整的代码,但改变一些事情:逐行:

#I delete follow line:
from sqlalchemy.databases.mysql import MSBinary
Run Code Online (Sandbox Code Playgroud)

因为在sqlalchemy 0.6中它是dialects.sqllite但是我不使用它我使用:

from sqlalchemy.types import Binary
Run Code Online (Sandbox Code Playgroud)

只需更改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)
Run Code Online (Sandbox Code Playgroud)

这对我有用,祝你好运!

以前的答案

user = Table(
    'User',
    meta.metadata,
    Column('ID', UUID(as_uuid=True), primary_key=True),
    Column('Name', String(250), nullable=False, unique=True)
)
Run Code Online (Sandbox Code Playgroud)