小编MRo*_*lin的帖子

以编程方式生成Datomic查询

应用

我想以编程方式生成以下形式的查询.

(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查询是数据结构,所以我应该能够以编程方式生成它们.我发现这很困难有几个原因,这两个原因都源于我对宏的不熟悉

  1. 我怎样才能创建像这样的术语?val1.我可以映射?到一堆生成的字符串吗?

    (map ? value-strings)

  2. 领导'吓到了我.这不会阻止我的自动代码运行,直到?x处理完元素之后?

或者,是否有更惯用的解决方案?

macros clojure datomic

1
推荐指数
1
解决办法
456
查看次数

重新排列 SQLAlchemy Select 对象中的列

问题

如何对 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正确的顺序使用一个对象和一个列名列表。

编辑2

代码来创建s. 再说一遍,我正在寻找一般问题的解决方案,而不仅仅是明确修复下面的顺序的代码片段。 …

python sql sqlalchemy

1
推荐指数
1
解决办法
3608
查看次数

确定我们是否在IPython笔记本会话中

如果从IPython笔记本调用它,我希望我的函数做一件事,如果从控制台或库代码调用它,我想要另一件事.特别是我正在制作一个具有以下所需行为的进度条:

  • Notebook:立即返回一个小部件
  • 控制台:阻止和转储信息sys.stdout

是否有一个标志,我可以检查以确定用户是否从笔记本电脑或其他方式调用我的功能?

ipython ipython-notebook

1
推荐指数
1
解决办法
495
查看次数

Bokeh DataRange1d慢慢移出屏幕

我有一个带有DataRange1d的散景图follow='end'.我发现,随着时间的推移,这个剧情的内容慢慢从屏幕向左移动.

python bokeh

1
推荐指数
1
解决办法
190
查看次数

标签 统计

python ×2

bokeh ×1

clojure ×1

datomic ×1

ipython ×1

ipython-notebook ×1

macros ×1

sql ×1

sqlalchemy ×1