我想以编程方式生成以下形式的查询.
(q '[:find ?id ?val1 ?val2 ?val3 ?val4 ...
:where [?x :id ?id]
[?x :attr1 ?val1]
[?x :attr2 ?val2]
[?x :attr3 ?val3]
[?x :attr4 ?val4]
....]
(db conn))
Run Code Online (Sandbox Code Playgroud)
这些是用于收集预定义属性集的相当标准的查询.
我能做的最好的就是使用:in如下
(q '[:find ?id ?val
:in $ [?attr ...]
:where [?x :id ?id]
[?x ?attr ?val]]
(db conn) [:attr1 :attr2 :attr3 :attr4])
Run Code Online (Sandbox Code Playgroud)
但这给了我n每个实体的一系列事实.我真的希望收到一组长度向量,n+1其中n是指定属性的数量.我还希望元素的顺序能够反映属性的顺序.
因为Datomic查询是数据结构,所以我应该能够以编程方式生成它们.我发现这很困难有几个原因,这两个原因都源于我对宏的不熟悉
我怎样才能创建像这样的术语?val1.我可以映射?到一堆生成的字符串吗?
(map ? value-strings)
领导'吓到了我.这不会阻止我的自动代码运行,直到?x处理完元素之后?
或者,是否有更惯用的解决方案?
如何对 SQLAlchemy 查询对象中的列重新排序?
Select给定一个代表以下查询的SQLAlchemy 核心对象:
>>> print s
SELECT sum(accounts.amount) AS amount_sum, accounts.name
FROM accounts GROUP BY accounts.name
LIMIT :param_1
Run Code Online (Sandbox Code Playgroud)
我想形成Select具有完全相同结构的对象,但列的顺序移动
SELECT accounts.name, sum(accounts.amount) AS amount_sum
FROM accounts GROUP BY accounts.name
LIMIT :param_1
Run Code Online (Sandbox Code Playgroud)
我想在不显着扩展 SQL 的情况下完成此操作。我尝试过 with with_only_columns,它嵌套了查询,我想再次避免
>>> print s.with_only_columns(list(s.columns)[::-1])
SELECT name, amount_sum
FROM (SELECT sum(accounts.amount) AS amount_sum, accounts.name AS name
FROM accounts GROUP BY accounts.name
LIMIT :param_1) GROUP BY accounts.name
LIMIT :param_2
Run Code Online (Sandbox Code Playgroud)
需要明确的是,上面的例子只是一个例子。我正在寻找一个通用的解决方案来对任意查询执行此操作。理想情况下,该函数将以Select正确的顺序使用一个对象和一个列名列表。
代码来创建s. 再说一遍,我正在寻找一般问题的解决方案,而不仅仅是明确修复下面的顺序的代码片段。 …
如果从IPython笔记本调用它,我希望我的函数做一件事,如果从控制台或库代码调用它,我想要另一件事.特别是我正在制作一个具有以下所需行为的进度条:
sys.stdout是否有一个标志,我可以检查以确定用户是否从笔记本电脑或其他方式调用我的功能?
我有一个带有DataRange1d的散景图follow='end'.我发现,随着时间的推移,这个剧情的内容慢慢从屏幕向左移动.