2012-01-02 13 views
10

Espero recibir un pequeño consejo sobre estanterías/bases de datos en Python.Uso de la plataforma multipista Python

Problema: Tengo una base de datos creada en el mac, que yo quiero usar en Windows 7. utilizo Python 3.2, MacOS 10.7, y ganar 7.

Al abrir y guardar mi estantería en el mac todo es bueno y bueno Obtengo un archivo con una extensión ".db". En mi windows-python no es reconocido. Sin embargo, puedo crear un nuevo db en la PC y obtener archivos con las extensiones ".bak, dat, .dir".

Supongo que la python en la PC no tiene la misma base de datos subyacente que mi mac-python usa?

no estoy seguro de que es el enfoque correcto aquí, pero a lo mejor que pude:

cambiar el valor predeterminado-DB que utiliza mi sistema? Descubre qué db usa mi mac-python y agrégalo a la pc. ¿Cambiar la forma en que guardo mis datos?

La velocidad no es un problema, el tamaño de la base de datos es de unos pocos megabytes y no se accede con mucha frecuencia.

Espero encontrar una mano que me ayude. Gracias de antemano, cualquier ayuda es muy apreciada.

/Esben

Lo que estoy haciendo:

Import shelve 
db = shelve.open('mydb') 
entries = db['list'] 
db.close 

Es bastante sencillo, tengo un db-archivo de trabajo llamado "mydb.db" en el mac, pero cuando trato de abrirlo en el PC-pitón me sale:

Rastreo (llamada más reciente pasado): archivo "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/dbm/ init .py" , línea 107, en el que db f = io.open (nombre de archivo + ".pag", "rb") IOError: [Errno 2] No existe ningún archivo o directorio: 'mydb.pag'

+0

¿Qué quiere decir cuando dice que no está reconocido en Windows? ¿Cómo estás tratando de abrir el archivo? ¿Puedes mostrar algún código de ejemplo? –

Respuesta

1

sqlite3 module es un módulo multiplataforma que incluso es compatible por muchos otros idiomas y herramientas.

módulo de pickle es más simple, pero también multiplataforma. Le das un objeto y lo tira a un archivo. No hay tablas o filas como sqlite.

+0

Pickle es probablemente el camino a seguir. Me gustó la idea de tener todo en un solo archivo. ¿no es posible forzar a Python a usar un db específico para shelve, que es multiplataforma? – Esben

+1

El estante ya usa decapado debajo del capó. –

+0

Bien, entonces probablemente me encontraría con el mismo problema entonces ... – Esben

2

¡Gracias por su respuesta!

Parece que los estantes en python no se ven fácilmente forzados a usar un db específico, sin embargo, los encurtidos funcionan como un amuleto. Al menos desde mac os -> windows 7.

respuesta tan corta: si desea la portabilidad, no use estantes, use encurtidos directamente.

/Esben

+0

sí pickle trabajo como encanto, tuve la misma experiencia también ... –

Cuestiones relacionadas