python-使用键入的uuid而不是字符串uuid来查询portal_catalog
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-使用键入的uuid而不是字符串uuid来查询portal_catalog,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1814字,纯文字阅读大概需要3分钟。
内容图文
我正在编写用于保留其他资源的Plone日历模块.该模块具有一个日历,其事件存储在Postgresql中.每个日历都是存储在ZODB中的敏捷对象.
为了在Plone和Postgresql之间建立链接,我自然地转向了Plone对象的uuid属性.因此,Plone中的每个uuid都在Postgresql中充当外键,而本地支持uuid.
在我开始使用Plone 4.1.4之前的6个月中,这对我来说效果很好.借助它,引入了plone.uuid 1.0.2,它将uuid的字符串表示形式从带有uuid的uuid更改为没有破折号的uuid.
更改的问题在于,我无法再确定将在任何给定对象上使用哪种表示形式.在Plone 4.1.4之前创建的对象所包含的uuid-string格式与在之后创建的对象不同.
长话短说,为了确保我的代码可以与任何uuid表示一起使用,我希望能够使用Python的uuid类型进行搜索.
所以代替这个:
catalog.searchResults(UID='325dc47e-08f9-4fa1-bc18-3944a725adb4')
返回的结果与此不同:
catalog.searchResults(UID='325dc47e08f94fa1bc183944a725adb4')
我想这样做:
from uuid import UUID
catalog.searchResults(UID=UUID('325dc47e-08f9-4fa1-bc18-3944a725adb4'))
等效于:
catalog.searchResults(UID=UUID('325dc47e08f94fa1bc183944a725adb4'))
有谁知道我如何通过Plone中uuid的表示实现这种独立性?
解决方法:
您将不得不查询两种格式;实际上,一旦分配了UID字段,就不应对其进行更改.因此,您的选择是:
>创建一个给定UID的方法,该方法返回带有虚线和非虚线版本的元组,然后用于查询目录:
def queryUID(UID):
if '-' in UID:
return (UID.replace('-', ''), UID)
return (UID, '-'.join([
UID[:8], UID[8:12], UID[12:16], UID[16:20], UID[20:]]))
使用该方法后,查询将变得简单:
catalog.searchResults(UID=queryUID('325dc47e-08f9-4fa1-bc18-3944a725adb4'))
>使数据库使用虚线版本,其中Plone UID带有破折号;非虚线版本,较旧的Plone内容仍具有不带破折号的UID.换句话说,将UID视为不透明字符串.
在任何情况下,Plone中的UID都不会更改,因此在生成虚线版本时,您不必搜索非虚线版本.将UID分配给对象后,它永远不会更改,也永远不会获得破折号.
>不建议您遍历您的ZODB,并用等效的虚线替换所有不带破折号的UID.这很可能会破坏通过UID链接到这些项目的其他任何内容.
内容总结
以上是互联网集市为您收集整理的python-使用键入的uuid而不是字符串uuid来查询portal_catalog全部内容,希望文章能够帮你解决python-使用键入的uuid而不是字符串uuid来查询portal_catalog所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。