【问题标题】:Database in Excel using win32com or xlrd Or Database in mysqlExcel 中的数据库使用 win32com 或 xlrd 或 mysql 中的数据库
【发布时间】:2023-05-22 07:03:01
【问题描述】:

我开发了一个网站,其中的页面只是 html 表格。我还通过扩展 python 的SimpleHTTPServer 开发了一个服务器。现在我正在开发我的数据库。

每个页面上的大部分表格内容都是静态的,不需要触摸。但是,每个表(即页面)有一列需要可编辑和存储。这些值只是用户可以输入的文本。用户通过html textareas 输入文本,这些文本通过javascript 附加到表格中。

数据库将存储键/值对,其中值是用户输入的文本(至少目前如此)。

现状

因为我网页的原始格式是 xlsx 文件,所以我选择使用 excel 工作簿作为我的数据库,它基本上只是反映了显示的 web html 表(页面)。

我通过win32com 连接到excel 工作簿。每次加载表(页面)时,javascript 都会遍历 html 文本区域并向服务器发送一个单独的请求,以从数据库中加载相应的文本。

目前这种方法有效,但速度非常慢。我已尽我所能优化一切,我相信速度限制是win32com 的直接后果。

因此,我看到了四种可能的方法:

  1. xlrd 替换我当前的win32com 功能
  2. 尝试通过使用win32com 的一次服务器调用数据库一次加载表(页面)的所有html 文本区域
  3. 切换到 sql 之类的东西(可能使用 mysql,因为它足够简单且足够强大,可以满足我的需求)
  4. 使用xlrd,但对每个表(页)的服务器进行一次调用,如 (2) 所示

我构建此功能的时间表大约是两天。

有人对这些方法的编码时间与速度之间的权衡有什么想法吗?如果有人想到任何更好/更简化的方法,请分享!

【问题讨论】:

  • Excel 不是数据库。不要那样使用它。你未来的自己会感谢你的。

标签: python mysql excel win32com xlrd


【解决方案1】:

可能不是您要寻找的答案,但您的帖子非常广泛,我使用了 win32coma 和 Excel,但并不认为它们是实现您目标的好工具。一个更简单的策略是:

  • 对于服务器,使用 Flask:它是一个 Python HTTP 服务器,通过 Python 代码和 HTML 模板响应 HTTP 请求变得非常容易。您将在 5 分钟内运行一个功能齐全的服务器,然后您将需要一些时间来创建代码以从您的数据库中获取数据并从模板中渲染(这些模板非常易于使用)。
  • 对于数据库,使用 SQLite(与 MySQL 集成的开销要大得多);因为你只有两天时间,所以
    • 您也可以使用简单的 CSV 文件,因为 API(Python 有一个 CSV 文件读/写模块)更简单,启动时间更短。每个用户一个 CSV,易于管理。您不必担心为用户插入行,您只需追加;并且您没有为用户实现行的删除,您只需将其标记为非活动(CSV 中的活动/非活动列)。在处理来自客户端的 GET 请求时,当您从 CSV 读取数据时,您可以计算有多少特定行处于非活动状态,并重新写入 CSV,因此有时请求响应客户端的速度会慢一些.
    • 更简单,但如果您不需要在 服务器 重新启动时保持持久性,则可以使用您选择的 内存中数据结构。如果这是一个演示,这应该是可以接受的限制。
  • 对于客户端,在 javascript 之上使用 jQuery -- 也许您已经这样做了。让操作 DOM 和使用滑入/滑出等效果变得超级容易。给自己买一本“​​学习 jQuery”的书,您将能够在几个小时内充分利用 jQuery。

如果您只有两天时间,可能会有点紧张,但您可能需要 2 天以上的时间来解决您当前策略面临的问题,以及您即将面临的问题。

【讨论】:

  • 感谢您的意见。正如你所说,我正在做客户端,这很棒。
  • 就服务器而言,使用扩展 SimpleHTTPServer 和 Flask 的自建服务器之间是否有明显的性能提升?
  • 您是否必须满足严格的性能要求?如果不是,请不要担心,Flask 很可能会等于或超过您的,更不用说您在开发和维护上节省的时间了。或者您只是想知道 Flask 的性能是否可以接受?您必须说出您要支持的负载,但 Flask 是多线程的,它非常可靠 AFAIK(但我从未运行或看过基准测试)。除此之外,如果不查看您的代码并进行测量以进行比较,就无法说清楚,显然超出了范围。
  • 我的性能要求非常低......基本上只是让它工作,这样它就不需要几分钟来加载一个 html 表,其中包含数百个 html 文本区域(目前花了这么长时间,但我认为这主要是由于使用 excel 作为我的数据库)。此时的目标用户数可能在 10-20 左右,因此预期流量并不多。现在我只通过实现一个做最少工作的 POST 处理程序来扩展 SimpleHTTPServer。我注意到 SimpleHTTPServer 有 10% 或更多的时间会丢弃对 POST 的请求......
  • 虽然在我的 POST 处理程序中,我调用了一个单独的 python 脚本来处理大部分处理/数据库接口。如果我只是简单地将这个单独的 python 代码直接注入到服务器所在的文件中,服务器会加速吗?
最近更新 更多