javascript - Python、 Bokeh 、Javascript : use Mongodb database query in callback

标签 javascript python mongodb bokeh

我正在使用 bokeh,并开始探索它的 javascript 和回调方面。

我有一段包含日期选择器的代码: 我希望回调在触发时对 mongodb 数据库执行查询。 问题是我不懂 JavaScript,需要一些指导来帮助我走向正确的方向。

这是我到目前为止得到的代码:

import pymongo
import pandas as pd
from bokeh.layouts import column
from bokeh.models import CustomJS, DatePicker
from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import curdoc
from bokeh.models.formatters import DatetimeTickFormatter
import datetime

p = figure(x_axis_type="datetime",plot_width=900, height=200, title="GBP")

mongo=pymongo.MongoClient()
start=datetime.datetime.today().replace(hour=0,minute=0,second=0,microsecond=0)
end=start+datetime.timedelta(hours=24)
data=pd.DataFrame.from_records(
                mongo.prices["Russia Ruble"].find({"datetime":
                                        {"$gte":start,"$lte":end}}))[["close","datetime"]]

source = ColumnDataSource(data.to_dict(orient="list"))

callback=CustomJS(args=dict(source=source),code='''
var data=source.data;
var f=cb_obj.value

start = f.replace(hour=0,minute=0,second=0,microsecond=0) # use a javacript equivalent of the python code here...
end= start +datetime.timedelta(hours=24) # use a javacript equivalent of the python code here...

data=pd.DataFrame.from_records(
            mongo.prices["Russia Ruble"].find({"datetime":
            {"$gte":start,"$lte":end}}))[["close","datetime"]] # use a javacript equivalent of the python code here...

source.change.emit()

''')

p.line(x = "datetime", y ="close", color="black", source=source)

datepicker=DatePicker(max_date=start,value=start)
datepicker.js_on_change("value",callback)
curdoc().add_root(column(p,datepicker))

起初我试图看看是否可以在回调中执行一些Python代码和一些JavaScript(或者只是一些Python代码..),但是this part of the doc似乎明确指出这是不可能的。

所以我接受了这样一个事实:我需要学习一些 javascript 才能完成我的任务,并研究了 mongo db 和 javascript。关于这个主题的简单谷歌研究似乎表明这个 would be close to what node.js is doing ,但我对此不太确定? bokeh js 回调是否等同于服务器端 javascript?然后this page (抱歉,它是法语的。但找不到任何对应的英语)解释说,为了将 mongodb 与 node.js 一起使用,我需要使用 nodejs 包管理器(npm)安装 mongodb 驱动程序...我就在那里显然已经偏离了轨道...

回顾一下: - 执行我需要在 JavaScript 回调中执行的简单操作的好方法是什么(即从日期选择器选择的日期创建开始时间和结束时间,然后使用该时间范围从我的 mongoddb 数据库查询数据)

最佳答案

您可以发布一些有关您的网络应用程序及其所在服务器类型的更多信息吗?

不幸的是,仅仅通过回调你将无法完成你想要的事情(即使你学习了 javascript)。

要解释这一点,您必须了解一点 Bokeh 在幕后的工作原理。如果您使用独立 html 或使用 script, div = components(plot) 嵌入 Bokeh 图,那么 python 只是创建一组自定义的 javascript 函数,并在嵌入到页面上的一个大脚本中序列化绘图的所有数据源。像“Figure”、“vbar”、“circle”这样的 Bokeh 对象被称为模型,所有模型都用 JavaScript 表示,并在生成时给出它们的数据。

该脚本在生成后不会单独与您的服务器或数据库进行通信。相反,回调只是修改模型已有的属性。例如,columnDataSource 模型具有某些列,并且所有这些列都放入 javascript 中,因此您可以使用回调来更改绘图中使用的列。

正如文档所述:

The architecture of Bokeh is such that high-level “model objects” (representing things like plots, ranges, axes, glyphs, etc.) are created in Python, and then converted to a JSON format that is consumed by the client library, BokehJS

如果您想使用 python 和数据库来使模型保持最新,这就是 Bokeh 服务器的用例。 Bokeh 服务器是一个嵌入式服务器,它将保持模型的所有 python 表示与 javascript 同步。

再次根据documentation :

However, if it were possible to keep the “model objects” in python and in the browser in sync with one another, then more additional and powerful possibilities immediately open up:

respond to UI and tool events generated in a browser with computations or queries using the full power of python This capability to synchronize between python and the browser is the main purpose of the Bokeh Server.

看看Bokeh Server文档并查看这是否适用于您的用例。

理论上,您可以让 JS 函数从不同的路径获取 JSON 数据并将该数据推送到您的 Bokeh 模型中,但我认为这不会起作用。 Bokeh 为每个模型和模型数据点生成大量唯一标识符,您需要在导入时查找和处理这些标识符。

bokeh 服务器上还有一个很棒的 pycon 演示。它比 2015 年的版本要旧一些,但对于理解这些概念确实很有帮助。 https://www.youtube.com/watch?v=O5OvOLK-xqQ

关于javascript - Python、 Bokeh 、Javascript : use Mongodb database query in callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47611583/

相关文章:

javascript - AngularJs 清理和显示 html

java - 什么是声音控制语言

linux - AWS ec2 redhat linux 上的 mongodb

javascript - 为什么 'await' 不等待 axios 请求完成?

javascript - 如何在不弄乱其余代码的情况下创建下拉菜单....?

javascript - 向下滚动平滑

python增量ip地址

python - PyQt:QTableWidget 取消全选?

javascript - MongoDB 中的通配符搜索

c# - MongoDb NORM - 分页和总文档