Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在烧瓶模板之间共享大型sqlalchemy对象_Python_Postgresql_Flask_Flask Sqlalchemy_Large Data - Fatal编程技术网

Python 在烧瓶模板之间共享大型sqlalchemy对象

Python 在烧瓶模板之间共享大型sqlalchemy对象,python,postgresql,flask,flask-sqlalchemy,large-data,Python,Postgresql,Flask,Flask Sqlalchemy,Large Data,我有一个flask应用程序,我想用它对postgresql数据库中的一个非常大的数据集进行数据可视化 我有sqlalchemy,plotly,GoogleMaps设置,但我当前的问题是,我想从数据库中获取一个相当大的数据集,并将其传递给一个模板,该模板将负责执行一些不同的可视化。我只想在站点启动时加载一次数据,然后避免在以后导航其他页面时运行它 我可以使用哪些方法来实现这一点?我如何访问在其他页面(模板)中获得的数据? 我在某个地方读到了关于session的内容,我试图实现这样一个功能,但后来我

我有一个flask应用程序,我想用它对postgresql数据库中的一个非常大的数据集进行数据可视化

我有sqlalchemy,plotly,GoogleMaps设置,但我当前的问题是,我想从数据库中获取一个相当大的数据集,并将其传递给一个模板,该模板将负责执行一些不同的可视化。我只想在站点启动时加载一次数据,然后避免在以后导航其他页面时运行它

我可以使用哪些方法来实现这一点?我如何访问在其他页面(模板)中获得的数据? 我在某个地方读到了关于
session
的内容,我试图实现这样一个功能,但后来我遇到了一个“不可序列化错误”,我通过将对象解析为JSON来修复这个错误,但随后我遇到了一个“头太大”错误。我觉得我有点不可能了

只是为了展示一些代码,下面是我目前正在处理的问题

Models.py:
从sqlalchemy导入BigInteger、列、JSON、文本
从应用程序导入数据库
类别表910(数据库模型):
__tablename_uuu='table_910'
id=db.Column(biginger,主键=True)
did=db.列(文本)
timestamp=db.Column(BigInteger)
data=db.Column(JSON)
db_timestamp=db.Column(BigInteger)
def项目(自身):
返回{'id':self.id,'did':self.did,'timestamp':self.timestamp,'data':self.data,'db_timestamp':self.db_timestamp}
定义报告(自我):
返回“”%(self.did,self.id)
Views.py
从flask导入渲染模板,会话
从应用程序导入应用程序、数据库、模型
从日期时间导入日期时间
将matplotlib.dates导入为mdates
将matplotlib.pyplot作为plt导入
将numpy作为np导入
导入json
绘声绘色地导入
@应用程序路径(“/”)
@应用程序路径(“/index”)
def index():
#从数据库中提取(运行大约需要50秒)
行=models.Table910.query\
.filter_by(did='357139052424715')\
.过滤器((models.Table910.timestamp>146684692000)和(models.Table910.timestamp<1467017760000))\
.order_by(models.Table910.timestamp.asc())
# 
#在绘图上管理和绘制数据
#
返回呈现模板('index.html',
ids=ids,
graphJSON=graphJSON,
行=行,
线路坐标=线路坐标)
编辑:
我可能已经解释了我的问题有点太模糊了,因此我想用一个特定的页面来加载数据,然后用另一个页面来绘制图形。目前我能想到的最好的方法是能够按下一个按钮获取数据,一旦数据加载,按下另一个按钮绘制图表。。如何实现这一点?

存储在
会话中的数据被放置在签名的cooky中。cooky的最大大小约为4096字节。你不应该在那里存储大数据。啊,我明白了。很高兴知道。那么这不是我应该使用的程序。我想用一个文件来写,只要没有人有更好的建议。存储在
会话
中的数据放在一个签名的cooky中。cooky的最大大小约为4096字节。你不应该在那里存储大数据。啊,我明白了。很高兴知道。那么这不是我应该使用的程序。我想用一个文件来写,只要没有人有更好的建议。
from sqlalchemy import BigInteger, Column, JSON, Text
from app import db

class Table910(db.Model):
    __tablename__ = 'table_910'

    id = db.Column(BigInteger, primary_key=True)
    did = db.Column(Text)
    timestamp = db.Column(BigInteger)
    data = db.Column(JSON)
    db_timestamp = db.Column(BigInteger)

    def items(self):
        return {'id': self.id, 'did': self.did, 'timestamp': self.timestamp, 'data': self.data, 'db_timestamp': self.db_timestamp}

    def __repr__(self):
        return '<1_Data %r, %r>' % (self.did, self.id)
from flask import render_template, session
from app import app, db, models
from datetime import datetime
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import numpy as np
import json
import plotly

@app.route('/')
@app.route('/index')
def index():
    # fetching from the database (takes ~50 seconds to run)
    rows = models.Table910.query \
        .filter_by(did='357139052424715') \
        .filter((models.Table910.timestamp > 1466846920000) & (models.Table910.timestamp < 1467017760000)) \
        .order_by(models.Table910.timestamp.asc())

    # 
    # managing and drawing data on plots
    #

    return render_template('index.html', 
                           ids=ids, 
                           graphJSON=graphJSON, 
                           rows=rows, 
                           routeCoordinates=routeCoordinates))