2012-01-02 11 views
10

Spero di ricevere un piccolo consiglio sugli scaffali/database in Python.Utilizzo di python shelve multipiattaforma

Problema: Ho un database creato su Mac, che voglio usare su Windows 7. io uso Python 3.2, MacOS 10.7, e vincere 7.

Quando apro e salvare il mio ripiano sul Mac tutto va bene e bene. Ricevo un file con estensione ".db". Sul mio windows-python non è riconosciuto. Posso comunque creare un nuovo db sul pc e ottenere file con estensioni ".bak, dat, .dir".

Sto immaginando che il python sul pc non abbia lo stesso database sottostante che il mio mac-python usa?

io non sono sicuro di quale è l'approccio corretto qui, ma forse potrei:

Cambiare il default-db che i miei sistemi usa? Scopri quale db my mac-python usa e aggiungilo sul pc? Cambia il modo in cui memorizzo i miei dati tutti insieme?

La velocità non è un problema, il datasize è di pochi megabyte e non è accessibile molto spesso.

Spero di trovare una mano d'aiuto. Grazie in anticipo, ogni aiuto è molto apprezzato.

/Esben

Quello che sto facendo:

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

E 'piuttosto semplice, ho un db-file di lavoro chiamato "mydb.db" su Mac, ma quando provo ad aprirlo sul pc-python ottengo:

Traceback (chiamata più recente scorso): File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/dbm/ init .py" , riga 107, in cui db f = io.open (nomefile + ".pag", "rb") IOError: [Errno 2] Nessun file o directory di questo tipo: 'mydb.pag'

+0

Cosa intendi quando dici che non è riconosciuto su Windows? Come stai tentando di aprire il file? Puoi mostrare qualche codice di esempio? –

risposta

1

sqlite3 module è un modulo multipiattaforma che è supportato anche da molti altri linguaggi e strumenti.

Il modulo pickle è più semplice, ma anche multipiattaforma. Gli dai un oggetto e lo scarica in un file. Nessuna tabella o riga come sqlite.

+0

Pickle è probabilmente la strada da percorrere. Mi è piaciuta l'idea di avere tutto in un unico file. non è possibile forzare Python ad usare un db specifico per shelve, cioè multipiattaforma? – Esben

+1

Shelve utilizza già il decapaggio sotto il cofano. –

+0

Ok, quindi probabilmente mi imbatterò nello stesso problema allora .. – Esben

2

Grazie per la risposta!

Mi sembra che gli scaffali in python non siano facilmente obbligati a utilizzare un db specifico, tuttavia i sottaceti funzionano come un incantesimo. Almeno da mac os -> windows 7.

Risposta così breve: se si desidera la portabilità, non utilizzare scaffali, utilizzare i sottaceti direttamente.

/Esben

+0

sì sottaceti funzionano come fascino, ho avuto la stessa esperienza anche ... –