我们一直在努力研究我们问题的全维数据库模型,现在是时候开始编码了。我们以前的项目使用了由字符串操作构建的手工制作的查询。
在python和复杂的数据库布局之间进行接口是否有最佳/标准的做法?
我简要地评估了SQLAlchemy,SQLObject和Django-ORM,但是(我可能很容易遗漏一些东西)它们似乎针对微小的Web类型(OLTP)事务进行了调整,我正在进行高容量分析(OLAP) )交易。
我的一些要求,可能与平时有所不同:
编写这些查询很简单,但编写代码以使数据排成一行非常繁琐,特别是随着模式的发展。这看起来像计算机可能擅长的东西?
答案 0 :(得分:6)
不要对你的要求感到困惑。一种尺寸并不适合所有人。
相对快速地加载大量数据
为什么不为此使用数据库的本地加载器?使用Python准备文件,但使用数据库工具加载。你会发现这非常快。
快速轻松地更新/插入少量数据
开始弯曲数据仓库的规则。除非您在谈论主数据管理以更新维度的报告属性。
这就是ORM和网络框架的用途。
轻松处理大量行(5年内每分钟300个条目)
同样,这就是您使用Python前端处理管道的原因,但实际的INSERT是由数据库工具完成的。不是Python。
轻松改变架构(以及python接口),以满足未来的需求
您几乎没有用于自动执行此功能。它肯定是“编程”的最低优先级任务。您通常会手动执行此操作以正确保存数据。
BTW,“通过字符串操作构建的手工制作的查询”可能是有史以来最大的错误。这些对于RDBMS解析器来说很难处理 - 它们比使用插入了绑定变量的查询要慢。答案 1 :(得分:3)
我正在使用SQLAlchemy和一个非常大的数据仓库,我正在使用它来完成整个ETL过程。特别是在某些来源中我有一些复杂的转换规则或某些异构来源(例如Web服务)。我没有使用Sqlalchemy ORM,而是使用它的SQL表达式语言,因为我不需要在ETL过程中映射任何对象。值得注意的是,当我带来一些源代码的逐字副本时,我宁愿使用db工具 - 比如PostgreSQL转储实用程序 - 。你不能打败那个。 SQL表达式语言是最接近SQLAlchemy(或任何ORM用于手写SQL)的方法,但由于您可以以编程方式从python生成SQL,因此您可以节省时间,特别是如果您要遵循一些非常复杂的转换规则。 / p>
但有一件事,我宁愿手工修改我的架构。我不相信任何工具。
答案 2 :(得分:2)
SQLAlchemy肯定。与SQLAlchemy相比,所有其他ORM看起来都像是儿童玩具。特别是Django-ORM。什么是Hibernate to Java,SQLAlchemy是Python。