环境: Ubuntu上的DataJoint版本(0.12.9)和MySQL 5.7
FreeTable的概念很好。提供一个dj.conn()对象和full_table_name,并创建一个您可以操作的表,该表独立于模块、虚拟模块和模式。
但是,此表的行为与其他用户表不同。例如,如果使用两个不应该有重叠结果的字典进行限制,一个普通表将返回一个空集。但是,FreeTable只返回第二个字典的结果。
例如:
FreeTable & {'exists': 1} & {'exists': 0}应该返回一个空表,因为和条目不能同时为1和0。
但是,在这种情况下,返回的表等效于:
FreeTable & {'exists': 0}(在第二个位置使用{'exists': 1}查询返回FreeTable & {'exists': 1})
以下操作与预期一样工作,并返回一个没有结果的表:
FreeTable & dj.AndList([{'exists': 1}, {'exists': 0}])我相信发生这种情况的原因是因为FreeTable继承的是Table而不是UserTable,元类属性在那里生效。
我的问题是,FreeTable的目的是什么,为什么它不能从UserTable继承它的属性,这样它才能更有用?
发布于 2022-03-07 22:08:26
FreeTable的用途与您所描述的完全一样:提供对数据库中没有相应类的表的访问。
考虑以下代码
q = dj.FreeTable(dj.conn(), '`ephys`.`session`')例如,如果表ephys.session具有字段exists,则可以将查询限制为
q & {'exists': 1}这将将查询q限制为字段exists = 1的行。但是,如果表不包含此类字段,则不应用任何限制。
您可能在代码中看到的是,感兴趣的表没有名为exists的字段。当DataJoint用dict限制查询时,不存在的字段将被忽略.
https://stackoverflow.com/questions/71344107
复制相似问题