2009-11-03 10 views
7

Desidero iniziare a utilizzare Core Date su iPhone con database MySQL preesistenti. Qual è il modo più semplice per trasferire un database MySQL su SQLite?Trasferire MySQL in SQLite

Ho provato a utilizzare SQLite Migrator, ma non so dove trovare i driver ODBC per Mac (Snow Leopard). Ho trovato http://www.ch-werner.de/sqliteodbc/ che sembra avere driver, ma sono per Power PC.

Se qualcuno potesse darmi una spiegazione, o dirmi quali sono gli strumenti migliori per questo, sarei grato.

Grazie.

+0

questa è una cosa di una volta o hai bisogno di farlo più volte? – cethegeek

+0

Lo farei occasionalmente e ripetutamente. Conosco MySQL, quindi preferisco lavorare su questo, ma devo convertirlo per iPhone. –

risposta

-1

Per fare le mie conversioni, ho finito per usare un ODBC from Actual Access. Penso di averlo usato in combinazione con SQLite Migrator. Non mi è mai piaciuto in questo modo anche se era sempre goffo. Anche costoso, ha finito per costare circa $ 80 per quei due pezzi di software.

Se dovessi ripetere l'operazione, acquisterei lo SQLiteConverter da SQLabs. Io uso il loro SQLite Manager, e sebbene abbia molti problemi di interfaccia, per il software di database non è male.

http://www.sqlabs.net/sqliteconverter.php

1

Hai guardato this Perl script? Non l'ho usato - ho appena fatto una rapida ricerca per la migrazione da mysql a sqlite ed è saltato fuori.


Edit (dopo aver risposto al mio commento):

Il reverse direction is dealt with here.

Se avete intenzione di farlo più volte e se i cambiamenti nella struttura dei dati dovessero accadere, forse sarebbe meglio usare qualcosa come Django (anche se in modo molto hacker). Con esso lo farei:

# This three lines are done once 
django-admin.py startproject mymigrationproject 
cd mymigrationproject 
./manage.py startapp migration 

# The following lines you repeat each time you want to migrate the data 
edit settings.py and make the changes to connect to MySQL 
./manage.py inspectdb > ./migration/models.py 
edit ./migration/models.py to reorder tables (tables in which other tables depend on top) 
mkdir fixtures 
./manage.py dumpdata migration > ./fixtures/data.json 
edit settings.py and make the changes to connect to SQLite 
./manage.py syncdb 
./manage.py loaddata ./fixtures.data.json 
+0

Grazie per la risposta. Penso di volere qualcosa con un apprendimento e una configurazione minimi, dato che non lo farò spesso. –

6

Forse il più semplice sarebbe utilizzare mysqldump per scaricare l'SQL raw dal database MySQL in un file di testo e quindi utilizzare la funzione sqlite3_exec() per eseguire tale SQL per popolare il database SQLite.

+1

è un dialetto leggermente diverso da SQL, in particolare per quanto riguarda gli schemi di creazione di tabelle. –

+2

Buon punto. Suppongo che se lo schema raramente viene modificato, è possibile scaricare solo i dati dal database MySql e disporre di un file script/sql separato che ha creato il database sqlite. Dovresti anche specificare --complete-insert in mysqldump. Sqlite non può gestire inserti composti (vedere domanda 1609637). –

+0

+1 per mysqldump. Sebbene ci siano alcune differenze tra la sintassi MySQL e SQLite, puoi facilmente trovare e sostituire con il tuo software o script preferito poiché le differenze sono minime. Ad esempio, AUTOINCREMENT è diverso. Se questo è qualcosa che farai regolarmente, puoi scrivere il tuo script o trovarne uno scritto da qualcun altro per rendere mysqldump compatibile con sqlite. – styfle

-1

Esiste un prodotto ETL gratuito che può essere utilizzato per migrare i dati da un db a un altro. Date un'occhiata: http://www.talend.com/index.php

Buona fortuna!

+0

Attenzione all'acquirente: questo sito Web è phishing. –

1

Ecco un elenco dei convertitori:


Un metodo alternativo che avrebbe funzionato bene, ma è raramente menzionato è: utilizzare una classe ORM che astrae le specifiche differenze di database via per voi. per esempio.si ottiene questi in PHP ( RedBean), Python (strato ORM di Django, Storm, SqlAlchemy), Ruby on Rails ( ActiveRecord), cacao ( CoreData)

per esempio, si potrebbe fare questo:

  1. caricare i dati da database di origine utilizzando la classe ORM.
  2. Memorizza i dati in memoria o serializza su disco.
  3. Memorizza i dati nel database di origine utilizzando la classe ORM.