我正在使用散景,並開始探索它的JavaScript和回調方面。Python,散景,Javascript:在回調中使用Mongodb數據庫查詢
我有一段包含日期選擇器的代碼: 我希望回調在觸發時對mongodb數據庫執行查詢。 事情是,我不知道JavaScript,並需要一些指針來幫助我在正確的方向。
這是我到目前爲止的代碼:我想看看是否有可能與一些JavaScript以及執行一些Python代碼
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代碼..)在回調,但this part of the doc似乎明確指出,這是不可能的。
所以我接受了這樣一個事實,我需要學習一些JavaScript來完成我的任務,並且研究了mongo db和javascript。關於這個話題的一個簡單的谷歌研究似乎表明,這would be close to what node.js is doing,但我不確定嗎?散景js回調是否等同於服務器端JavaScript?然後this page(對不起,這是法語..但無法找到任何等效的英文)解釋說,爲了使用mongodb和node.js,我需要使用nodejs軟件包管理器(npm)安裝mongodb驅動程序...那裏我顯然已脫離軌道...
所以回顧: - 什麼是執行我需要在我的javascript回調中執行的簡單操作的一種好方法(例如,從所選日期創建開始時間和結束時間由datepicker,然後使用該時間範圍查詢我的mongoddb數據庫中的數據)
thx您的回覆!是的,這是我第一次刺散景小部件,所以我有點迷路。事實上,按照我的想法做事非常容易,只需使用'.on_change'而不是'.js_on_change',就像我在第一次嘗試時那樣。我通過查找參考圖庫的源代碼找到了解決方案。 –