好的做法是否包括为每个表创建一个类?如果是这样,在没有 orm 的情况下将此类类加载/保存回数据库的最佳实践是什么?
您正在使用 ORM。您正在将对象映射到关系表。您是否使用预先构建的库来这样做是您的决定。如果你不这样做,你实际上将自己实现一个,尽管可能没有现有 ORM 的所有花里胡哨。
两种最常见的方法是 ActiveRecord 模式和 Data Mapper 模式。每个都有其优点和缺点。
使用 ActiveRecord 模式,您可以定义其属性为您定义表列的类。此类的每个实例对应于数据库中的一行,通过创建(并保存)一个新实例,您可以在数据库中创建一个新行。更多信息可在此处获得: http ://en.wikipedia.org/wiki/Active_record_pattern
在 Data Mapper 模式中,您为每个表定义表对象,并编写将表的列分配给现有类的映射器函数。SQLAlchemy 默认使用这种模式(尽管有 ActiveRecord 类型扩展模块,它使 SQLAlchemy 的功能适应不同的接口。关于这种模式的简要介绍可以在 SQLAlchemy 的文档中找到:http ://www.sqlalchemy.org/docs/ 05/ormtutorial.html(从头开始阅读,但不包括标题为“以声明方式同时创建表、类和映射器”的部分;该部分解释了使用 SQLAlchemy 的 ActiveRecord)。
ActiveRecord 模式更易于设置和使用,并为您提供明确代表数据库的类,这在可读性方面具有优势。作为附带的好处,ActiveRecord 类的声明性质有效地充当数据库模式的清晰和直接的文档。
Data Mapper 模式在数据如何映射到类方面为您提供了更大的灵活性,因此您不必拘泥于表和类之间或多或少的一对一关系。它还将您的持久层与您的业务代码分开,这意味着您可以在以后根据需要更换其他持久性机制。这也意味着您可以更轻松地测试您的类,而无需设置数据库来支持它们。
有关 SQLAlchemy 映射器配置的更深入讨论,请查看http://www.sqlalchemy.org/docs/05/mappers.html。即使您不打算使用像 SQLAlchemy 这样的库,文档也应该可以帮助您了解在将类映射到数据库表时可能需要考虑的一些选项。