【问题标题】:Effectively use query results using web.py使用 web.py 有效地使用查询结果
【发布时间】:2013-04-19 07:27:42
【问题描述】:

我正在使用 web.py 来管理我的 Web 应用程序并使用 MySQL 作为数据库。我进行原始查询并获取结果,然后将其转换为列表并对其进行迭代。我需要将检索到的列推送到数组(或 Numpy 数组)中,然后使用 Matplotlib 进行绘图。一切正常,但我不确定我使用的方法是否最有效? 代码是:

retrieved_data=list(db.query(query))
LEN=len(retrieved_data)
x=[0]*LEN
y=[0]*LEN
X=[None]*LEN
for i in range(0,LEN):
    x[i]=retrieved_data[i]["timestamp"]
    y[i]=retrieved_data[i][parameter]
    X[i]=datetime.datetime.fromtimestamp(x[i],pytz.timezone(TIMEZONE))

【问题讨论】:

    标签: mysql web.py


    【解决方案1】:

    如果只需要迭代一次,则不必转换 db.query 的结果。所以你的具体例子可以稍微简化一下。

    x, y, X = [], [], []
    for item in db.query(query):
        x.append(item.timestamp)
        y.append(item[parameter])
        X.append(datetime.datetime.fromtimestamp(item.timestamp,
                                                 pytz.timezone(TIMEZONE))
    

    或者,如果您需要对相同的结果进行多次迭代,您可以使用.list() 方法将其转换为列表。

    retrieved_data = db.query(query).list()
    

    【讨论】:

    • 追加不会比简单索引慢,因为由于追加,列表的大小会随着每次迭代而变化。权衡将是:在每次迭代时转换为列表与追加(无需转换)
    • 不确定性能,但我认为在 db 查询结果中调用 list 需要在后台再迭代 1 次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    相关资源
    最近更新 更多