Storm是Canonical开发的Python对象关系映射(ORM)。
项目描述
Storm 是 Canonical 开发的 Python 对象关系映射器。API 文档、手册和教程可以从以下链接获取:
简介
该项目在发布为免费软件之前,经过了一年多的开发,用于 Canonical 的项目,如 Launchpad 和 Landscape。
设计
干净且轻量级的 API 提供了短的学习曲线和长期的可维护性。
Storm 以测试驱动的方式进行开发。未测试的代码行被视为错误。
Storm 不需要特殊的类构造函数,也没有命令式基类。
Storm 设计得很好(不同的类有非常清晰的边界,具有小型且干净的公共 API)。
从第一天开始设计,既可以与薄关系型数据库(如 SQLite)一起工作,也可以与大型系统(如 PostgreSQL 和 MySQL)一起工作。
由于代码遵循 KISS 原则,因此 Storm 容易调试,也容易理解。
从第一天开始设计,既可以用于低端(具有简单的小型数据库),也可以用于高端(应用程序访问数十亿行的表,并向多个数据库后端提交)。
编写和支持 Storm 后端非常容易(当前后端代码大约有 100 行)。
特性
Storm 很快。
Storm 允许您通过使用 Python 构建跨越多个表的复杂查询来有效地访问和更新大型数据集。
Storm 允许您在需要时回退到 SQL(或者如果您更喜欢),允许您混合“老式”代码和 ORM 代码
Storm 容易处理复合主键(不需要代理键)。
Storm 不进行模式管理,因此您可以自由地按照所需管理模式,创建与 Storm 一起工作的类既干净又简单。
Storm 在连接到多个数据库时表现良好,并使用相同的 Python 类型(或不同的类型)与所有数据库一起工作。
Storm 可以处理 obj.attr = <A SQL expression> 赋值,当真正需要时(表达式在 INSERT/UPDATE 时间内执行)。
Storm 在对象添加到数据库之前就处理了对象之间的关系。
Storm 与现有的数据库模式配合良好。
Storm 在需要时自动将更改刷新到数据库,以确保查询影响的最近修改的对象。
许可证
版权 (C) 2006-2020 Canonical, Ltd. 所有贡献必须将版权分配给 Canonical。
此库是自由软件;您可以在自由软件基金会发布的 GNU 较小于公共许可证条款下重新分发和/或修改它;许可证版本 2.1 或(根据您的选择)任何较新版本。
本库的发布是为了希望它是有用的,但没有任何保证;甚至没有关于商销性或针对特定目的适合性的隐含保证。有关详细信息,请参阅GNU Lesser General Public License。
你应该已经随本库收到了GNU Lesser General Public License的一个副本;如果没有,请写信给Free Software Foundation, Inc.,地址:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA。
在Ubuntu系统上,GNU Lesser General Public License版本2.1的完整文本位于/usr/share/common-licenses/LGPL-2.1。
开发Storm
简短版:如果您正在运行Ubuntu,或者可能是Debian,以下操作应该可行。如果不行,以下为详细版。
$ dev/ubuntu-deps $ echo “$PWD/** rwk,” | sudo tee /etc/apparmor.d/local/usr.sbin.mysqld >/dev/null $ sudo aa-enforce /usr/sbin/mysqld $ make develop $ make check
详细版
以下说明描述了设置开发环境和运行测试套件的步骤。
安装依赖项
以下说明假设您正在使用Ubuntu。在Debian系统上,此过程可能无需更改即可工作,在非Debian基于的Linux发行版上可能只需要最小更改。为了运行测试套件并测试所有支持的数据库后端,您需要安装MySQL和PostgreSQL,以及相关的Python数据库驱动程序。
- $ sudo apt-get install
mysql-server postgresql pgbouncer build-essential
这些需要几分钟才能下载。
运行测试的Python依赖项可以使用apt-get安装
- $ apt-get install
python3-fixtures python3-pgbouncer python3-psycopg2 python3-testresources python3-timeline python3-transaction python3-twisted python3-zope.component python3-zope.security
或者,可以使用以下命令将依赖项下载为当前目录下的egg文件
$ make develop
这确保所有依赖项都可用,并从PyPI下载适当的依赖项。
数据库设置
大多数数据库设置都由测试套件自动完成。但是,Ubuntu默认的MySQL打包版包含一个AppArmor配置文件,该文件阻止它写入本地数据目录。为了允许测试套件这样做,您需要授予它访问权限,最简单的方法是将类似以下行添加到/etc/apparmor.d/local/usr.sbin.mysqld
/path/to/storm/** rwk,
然后重新加载配置文件
$ sudo aa-enforce /usr/sbin/mysqld
运行测试
最后,是时候运行测试了!进入您要测试的storm分支的基本目录,并运行
$ make check
它们需要一段时间才能运行。所有测试都应该通过:失败意味着您的环境存在问题或Storm中存在错误。