首先,我使用python创建了简单的静态Google可视化页面
python中的源代码:
def print_graph_script(temp_table):
# google chart snippet
chart_code="""
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Time', 'Temperature', 'Low', 'High'],
%s
]);
var options = {
title: 'Temperature stats',
};
var chart = new google.visualization.LineChart(document.getElementById('temp_chart_div'));
chart.draw(data, options);
}
</script>"""
print chart_code % (temp_table)
并导致html:
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Time', 'Temperature', 'Low', 'High'],
['01.15.2015 22:23:53', 22.937, 20.0, 22.0],
['01.15.2015 23:23:43', 21.687, 20.0, 22.0]
]);
var options = {
title: 'Temperature stats',
};
var chart = new google.visualization.LineChart(document.getElementById('temp_chart_div'));
chart.draw(data, options);
}
</script>
正如它所看到的那样,它运行良好,并以时间戳的形式通过时间戳&#39; 01.15.2015 23:23:43&#39;,这看起来像是一个字符串给我。
现在我尝试进化并转移到Json,这让我感到头疼。
在convert python sql list into dictionary发布的Brent Washburne中,我相应地创建了我的字典
结果示例:
[{'timestamp': u'01.15.2015 23:54:12', 'temp': 21.375}]
现在,当我把它传递给gviz_api把它变成json:
schema = {"timestamp": ("string", "timestamp"),"temp": ("number", "temp")}
data = temp_chart_table
# Loading it into gviz_api.DataTable
data_table = gviz_api.DataTable(schema)
data_table.LoadData(data)
json = data_table.ToJSon()
我得到与arraytodatatable类似的结果:
[{"v":"01.15.2015 23:59:42"}]}]
令人惊讶的是,javascript不再像字符串了,并且错误地打击了我:
轴#0的数据列不能是字符串
互联网上有一些小信息,除了一些源代码。 我试图改变&#34; string&#34;至于&#34; datetime&#34;,如https://developers.google.com/chart/interactive/docs/reference#DataTable所示,但随后我遇到了转换问题的砖墙。
为什么它不再像字符串日期(以任何形式),比如arraytodatatable? 或者我该如何解决这个问题呢?
答案 0 :(得分:0)
另一个不眠之夜带我去了https://docs.python.org/2/library/sqlite3.html第11.13.5.4章。默认适配器和转换器
它使用&#34; detect_types&#34;在连接标题中。
connection = sqlite3.connect(dbname,detect_types=sqlite3.PARSE_DECLTYPES)
显然,您需要从格式化数据库获取巡回时间戳:
datetime.datetime(2015, 1, 16, 10, 43, 54, 193266)
而不是unicode字符串,如我原来的问题
中所述感谢您的帮助!