【问题标题】:Using web2py for a user frontend crud使用 web2py 作为用户前端 crud
【发布时间】:2016-05-04 11:22:57
【问题描述】:

我被要求将 Access 数据库移植到 MySQL 和 为用户提供一个简单的 Web 前端。 数据库由 8-10 个表组成,并存储有关 客户咨询(客户、顾问、主题、时间等)。

我需要提供一个网络界面供我们的顾问使用, 他们在会话期间将所有这些信息插入到预定义的掩码/表单中。

我最初的想法是将 Access-DB 移植到 MySQL,我已经这样做了 然后使用 web2py 框架构建一个带有登录的用户界面, 插入数据、浏览/滚动案例和提取报告。

带有用户管理和一些示例视图和控制器的 web2py 以及 MySQL-DB 正在运行。我将数据库添加到 web2py 中的 DAL, 但现在我注意到,使用 web2py 必须定义每个表 再次在 web2py 中,因为它能够与 SQL-Server 通信。

在努力成功运行 extract_mysql_models.py 脚本时 导出现有 SQL DB 的结构以在 web2py 中使用 对 web2py 的担忧正在累积。

这种与我的数据库交谈的双重/冗余方式让我觉得奇怪而且 web2py 不支持 python3。

web2py 是完成我的任务的正确方法还是有更好的方法?

非常感谢您的聆听/帮助。

【问题讨论】:

    标签: python mysql frontend crud web2py


    【解决方案1】:

    这种与我的数据库对话的双重/冗余方式让我觉得很奇怪,而且 web2py 不支持 python3。

    您想用来与数据库通信的任何抽象(无论是 web2py DAL、Django ORM、SQLAlchemy 等)都必须对数据库架构有一些了解才能构建查询。

    即使您在不使用 ORM/DAL 的情况下自行以编程方式生成所有 SQL 语句,您的代码仍然需要了解一些数据库结构(即,您必须在某处指定表和字段的名称等)。 )。

    对于现有的数据库,我们的目标是通过数据库模式的自省来自动化这个过程,这是 extract_mysql_models.py 脚本的目的。如果该脚本不起作用,您应该在 Github 上报告问题和/或在 web2py Google Group 上打开一个线程。

    另外,请注意,在创建 new 数据库时,web2py 通过为您处理迁移(包括表创建)来帮助您避免架构的冗余规范——因此您只指定架构 在 web2py 中,DAL 会自动在数据库中创建表(当然,这是可选的)。

    【讨论】:

    • 感谢您的回答!我幼稚的初学者知识希望 DAL 在将其连接到数据库时能够自行检查和了解它及其结构。 (爬过数据库并构建模型)猜猜这就是脚本正在做的事情。是的,我想最好的方法是让 web2py 自己创建一个新的 MySQL 数据库并从那里开始。这不是强制性的,但是将旧数据实现到新数据库中会很好。如果我在 web2py 中重建结构然后导入应该可以工作。也许可以自定义插入?
    • 如果您要在 web2py 中指定所有表模型,则没有特别的理由需要将数据从一个 MySQL 数据库移动到另一个 - web2py 可以很好地连接到现有数据库。我只是指出,对于您与 web2py 应用程序同时创建数据库的项目,您只需指定一次架构(在 web2py 中),web2py 将为您处理在数据库中创建架构。
    • 实际上,您可能会考虑将数据迁移到新数据库的一个原因是,默认情况下,web2py 使用单个自动递增整数字段作为每个表的主键。如果您现有的数据库不采用这种方法,则可能值得进行更改。 web2py 可以处理备用主键(包括复合键),但在这种情况下某些功能将受到限制。
    • 另外,请注意,您不希望 web2py DAL 在每个 HTTP 请求上检查您的数据库以派生模式。相反,您可能希望对模式进行一次“离线”自省,以便 web2py 设置其模型。此外,您确实希望在可以编辑的应用程序代码中指定模型,因为模型通常包含超出数据库模式范围的元数据(例如,验证器、“表示”函数等)。这是 extract_mysql_models.py 脚本采用的方法。
    • 最后,请注意 web2py(像大多数 Web 应用程序框架一样)并不是一个通用的 RDBMS 管理工具(如 MySQL Workbench),它能够连接到任何现有数据库并启用完整的 CRUD功能,无需编写任何代码。相反,它的主要目的是支持开发数据库驱动的 Web 应用程序。可以在 web2py 之上编写更自动化的东西(如 MySQL Workbench),但 web2py 不包括开箱即用的此类功能(尽管它已经与模型提取脚本和内置网格非常接近)。
    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2018-08-30
    • 2018-01-05
    • 1970-01-01
    相关资源
    最近更新 更多