我有一些严重依赖于MySQL的软件,它们是用python编写的,没有任何类定义。出于性能原因,并且因为数据库实际上只是用来存储和检索大量数据,所以我想将其转换为一个根本不使用数据库的面向对象的python脚本。
因此,我的计划是将数据库表导出到一组文件(不是很多--这是一个非常简单的数据库;它很大,因为它有很多行,但只有几个表,每个表只有两到三列)。
然后,我计划读入数据,并拥有一组提供对数据的访问和操作的函数。
我的问题是:
是否有将一组数据库表转换为类和对象的首选方法?例如,如果我有一个包含水果的表,其中每个水果都有一个id和一个名称,我会有一个包含" fruit“对象列表的"CollectionOfFruit”类,还是只有一个包含元组列表的"CollectionOfFruit“类?或者我应该只有一个水果对象的列表?
我不想添加任何额外的框架,因为我希望这段代码可以轻松地转移到不同的机器上。所以我只是在寻找关于如何表示数据的一般建议,这些数据可能更自然地存储在数据库表中,在Python中的对象中。
或者,有没有一本我应该读的好书,在这方面给我指明了正确的方向?
发布于 2009-02-17 15:51:39
如果数据适合数据库表(“矩形数据”),为什么不将其转换为sqlite?它是可移植的--只需一个文件就可以移动数据库,并且sqlite可以在任何安装了python的地方使用(不管怎样,2.5或更高版本)。
发布于 2009-02-17 15:17:01
通常,你希望你的对象与你的“真实世界实体”完全匹配。
因为您是从数据库开始的,所以数据库并不总是具有任何真实世界的保真度。有些数据库设计简直是糟糕透顶。
如果你的数据库有合理的Fruit模型,那就是你开始的地方。首先要做好这一点。
“集合”可能是--也可能不是--是解决方案算法的一部分的人工构造,而不是问题的真正适当部分。通常,集合是问题的一部分,您也应该设计这些类。
但是,在其他情况下,集合是使用了数据库的工件,您只需要一个简单的Python列表。
在其他情况下,集合实际上是从某个唯一键值到实体的正确映射,在这种情况下,它是一个Python字典。
有时,集合是从某个非唯一键值到某个实体集合的正确映射,在这种情况下,它是一个Python collections.defaultdict(list)。
从基本的、类似真实世界的实体开始。这些类有类的定义。
集合可以使用内置的Python集合,也可以需要自己的类。
发布于 2009-02-17 15:06:14
对此没有“一刀切”的答案--这在很大程度上取决于数据及其在应用程序中的使用方式。如果数据和用法足够简单,您可能希望将结果存储在一个字典中,id作为键,其余数据作为元组。或者不是。这完全取决于。如果有一个指导原则的话,那就是提取应用程序的底层需求,然后根据这些需求编写代码。
https://stackoverflow.com/questions/557199
复制相似问题