2013-12-11 51 views
1

我有一个大的postgrSQL数据库。我想以某种方式将完整的数据库存储在一个python对象中,该对象的形式/结构将反映数据库的一个。也就是我想象的东西类似 *一个对象数据库,具有属性.tables,其中一种对象“table”的列表,以及一个table对象具有属性“list_of_keys”(列名称的列表)和属性“rows” ,它反映了数据库中相应表的所有行。如何将一个SQL数据库存储在一个python对象中,并在该对象中执行查询?

现在,主要点我需要的是:我希望能够在数据库对象中执行搜索,使用相同的SQL数据库中完全相同的SQL合成器。因此,像 database.execute(“SELECT * FROM .....”) 其中,我再说一遍,“数据库”是一个纯粹的python对象(它充满了来自SQL数据库的数据,但现在是独立的)。

我的目标是:我希望能够在不改变我的代码的情况下,在SQL数据库或python对象上应用相同的算法,如上所述。所以,我想,让“数据库”是一个通常的数据库连接器/光标(例如像psycopg),或者如我所描述的python对象,以及相同的代码片段012xxdatabase.execute(“SELECT BLABLABLA” ) 将在这两种情况下工作。

是否有任何已知的模块允许?

谢谢。

+1

你看过[SQLAlchemy](http://www.sqlalchemy.org/)吗? –

+0

我听说过它,但我不确定,它做我想要的。可以 ? –

+0

那么,你可以定义一个数据库/表模型,并与python动态地进行交互。我还没有听说过任何时候都会自动*反映您数据库的方案的工具。 –

回答

2

它可能会有点复杂,但看看SQLite's内存存储:

import sqlite3 
cnx = sqlite3.connect(':memory:') 
cnx.execute('CREATE TABLE ...') 

有在SQL语法的一些差异,但基本的东西工作正常。这可能也需要大量的RAM,具体取决于您的数据。

+0

感谢您的提示。我会看看它,但恐怕,SQLite可能不适合我的数据的大小(几个表有10/20个collums和数百万行) –

+0

@nicoroy那么你可能无法将你的数据存储为python对象,而你的问题变得不清楚,你必须为你的对象使用一些序列化方法,为什么不使用db呢? – alko

+0

我已经将自己的数据存储在一个自制的python字典中,它可以工作(我的意思是,就内存大小而言)。但是我需要的功能是“在对象上用SQL sythax执行查询”,当然,我没有用我自制的字典。 –

相关问题