首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeTable的目的是什么?它不具有与用户表相同的行为。它不在文档中。

FreeTable的目的是什么?它不具有与用户表相同的行为。它不在文档中。
EN

Stack Overflow用户
提问于 2022-03-03 21:38:39
回答 1查看 20关注 0票数 0

环境: Ubuntu上的DataJoint版本(0.12.9)和MySQL 5.7

FreeTable的概念很好。提供一个dj.conn()对象和full_table_name,并创建一个您可以操作的表,该表独立于模块、虚拟模块和模式。

但是,此表的行为与其他用户表不同。例如,如果使用两个不应该有重叠结果的字典进行限制,一个普通表将返回一个空集。但是,FreeTable只返回第二个字典的结果。

例如:

代码语言:javascript
复制
FreeTable & {'exists': 1} & {'exists': 0}

应该返回一个空表,因为和条目不能同时为1和0。

但是,在这种情况下,返回的表等效于:

代码语言:javascript
复制
FreeTable & {'exists': 0}

(在第二个位置使用{'exists': 1}查询返回FreeTable & {'exists': 1})

以下操作与预期一样工作,并返回一个没有结果的表:

代码语言:javascript
复制
FreeTable & dj.AndList([{'exists': 1}, {'exists': 0}])

我相信发生这种情况的原因是因为FreeTable继承的是Table而不是UserTable,元类属性在那里生效。

我的问题是,FreeTable的目的是什么,为什么它不能从UserTable继承它的属性,这样它才能更有用?

EN

回答 1

Stack Overflow用户

发布于 2022-03-07 22:08:26

FreeTable的用途与您所描述的完全一样:提供对数据库中没有相应类的表的访问。

考虑以下代码

代码语言:javascript
复制
q = dj.FreeTable(dj.conn(), '`ephys`.`session`')

例如,如果表ephys.session具有字段exists,则可以将查询限制为

代码语言:javascript
复制
q & {'exists': 1}

这将将查询q限制为字段exists = 1的行。但是,如果表不包含此类字段,则不应用任何限制。

您可能在代码中看到的是,感兴趣的表没有名为exists的字段。当DataJoint用dict限制查询时,不存在的字段将被忽略.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71344107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档