python – sqlalchemy.exc.ProgrammingError :( ProgrammingError)无法调整类型’UUID’
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – sqlalchemy.exc.ProgrammingError :( ProgrammingError)无法调整类型’UUID’,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3635字,纯文字阅读大概需要6分钟。
内容图文
![python – sqlalchemy.exc.ProgrammingError :( ProgrammingError)无法调整类型’UUID’](/upload/InfoBanner/zyjiaocheng/912/d58b7af1fb8d430bbd6b8a7e2d8d5f1c.jpg)
我的桌子是
categories = table('categories',
Column('uuid', UUID(), default=uuid.uuid4,
primary_key=True,
unique=True, autoincrement=False),
Column('name', String),
Column('parent', String),
Column('created_on', sa.types.DateTime(timezone=True),
default=datetime.utcnow())
)
当我尝试插入数据时,我明白了
sqlalchemy.exc.ProgrammingError: (ProgrammingError) can't adapt type 'UUID' 'INSERT INTO categories (uuid, name, parent, created_on) VALUES (%(uuid)s, %(name)s, %(parent)s, %(created_on)s)' ({'created_on': datetime.datetime(2013, 3, 31, 4, 12, 26, 801940), 'name': 'Alcohol & Bars', 'parent': 'Food & Drink', 'uuid': UUID('860e5bae-b770-425f-8672-c15c49508a1f')}, {'created_on': datetime.datetime(2013, 3, 31, 4, 12, 26, 801940), 'name': 'Coffee & Tea', 'parent': 'Food & Drink', 'uuid': UUID('de6ad60e-a076-483d-90e9-93916c537583')},
然后我把我的桌子改成了
categories = table('categories',
Column('uuid', UUID(), default=str(uuid.uuid4()),
primary_key=True,
unique=True, autoincrement=False),
Column('name', String),
Column('parent', String),
Column('created_on', sa.types.DateTime(timezone=True),
default=datetime.utcnow())
)
然后我开始看到错误
sqlalchemy.exc.IntegrityError: (IntegrityError) duplicate key value violates unique constraint "categories_pkey"
DETAIL: Key (uuid)=(cb80a166-adce-4a6e-9e1a-c210d9b86732) already exists.
'INSERT INTO categories (uuid, name, parent, created_on) VALUES (%(uuid)s, %(name)s, %(parent)s, %(created_on)s)' ({'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Alcohol & Bars', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Coffee & Tea', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Dessert', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Fast Food', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Groceries', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Other', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Restaurants', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Snacks', 'parent': 'Food & Drink', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'} ... displaying 10 of 43 total bound parameter sets ... {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Other', 'parent': 'Financial', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'}, {'created_on': datetime.datetime(2013, 3, 31, 4, 14, 22, 732107), 'name': 'Tax Preparation', 'parent': 'Financial', 'uuid': 'cb80a166-adce-4a6e-9e1a-c210d9b86732'})
现在为什么uuid.uuid4()总会给出相同的值?我该如何解决这个问题?
谢谢
解决方法:
要使您的第一个代码示例生效,您需要设置UUID(as_uuid = True)(请参阅UUID上的文档),否则DBAPI适配器需要一个字符串值.
您的第二个示例不起作用,因为default = str(uuid.uuid4())存储一个字符串值,该值在定义表对象时生成一次,并且每次都使用(因此重复值异常).您需要在此处传递函数,因此每次插入行时都会对其进行求值:
default=lambda: str(uuid.uuid4())
同样代表default = datetime.utcnow(),它必须是default = datetime.utcnow.另一件事是主键不需要unique = True约束,因为它已经保证是唯一的.
内容总结
以上是互联网集市为您收集整理的python – sqlalchemy.exc.ProgrammingError :( ProgrammingError)无法调整类型’UUID’全部内容,希望文章能够帮你解决python – sqlalchemy.exc.ProgrammingError :( ProgrammingError)无法调整类型’UUID’所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。