我正在使用 SQLalchemy 和 sqlite 开发我的第一个 Pylons 项目。 我想使用 UUID 作为我的一个表的主键。我发现了下面的问题,我使用代码将自定义 UUID() 类型添加到 SQLalchemy。 (第二种解决方案,我无法弄清楚如何使用 zzzeek 的建议。)
Random ids in sqlalchemy (pylons)
但是,当我尝试时,我得到 ValueError('bytes is not a 16-char string') 我怀疑这与我试图将此 UUID 存储在 sqlite VARCHAR 类型字段中这一事实有关。 有谁知道我应该在 sqlite 中使用哪种类型的字段来处理这些来自 SQLalchemy 的 UUID?
谢谢, 埃里克
最佳答案
你是对的,这只适用于 postgresql(我使用的数据库)。 但我潜入你提供的帖子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)
)
关于python - 使用 Pylons 和 SQLalchemy 在 sqlite 中存储 UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5849389/