Ik moest onlangs een op web2py gebaseerde CRM-app die wordt gehost op een Apache-server met een SQLite-backend naar MySQL converteren. Hieronder staan de stappen die voor mij hebben gewerkt. Ik heb een voorbeeldtoepassing gemaakt om mee te werken. Als je wilt volgen, kun je hier alle bestanden downloaden.
Let op:ik gebruik web2py versie 2.4.7 in een Unix-omgeving. Voordat u begint, moet u ervoor zorgen dat SQLite op uw systeem is geïnstalleerd. Je kunt dit installeren met pip,
pip install sqlite
, of je kunt de binaire bestanden pakken op http://sqlite.org/download.html. Je moet ook MySQL geïnstalleerd hebben. Als je hulp nodig hebt, volg dan de tutorials hier.
De huidige database heeft alle standaard web2py-tabellen en een gebruikers tabel met de velden id , startdatum , en einddatum :
db.define_table(
'users',
Field('start_date','string'),
Field('end_date','string')
)
Deze code volgt de web2py DAL-syntaxis. De tabel bevat 30.000 rijen met gegevens.
Gegevens opschonen
Download de nieuwste SQLite-database van uw toepassing. Standaard is dit het bestand met de naam storage.sqlite onder de map "/web2py/applications/
$ sqlite3 storage.sqlite .dump > output_before.sql
Bewerk met een teksteditor de output_before.sql bestand:
- Verwijder alle regels die beginnen met
PRAGMA
,BEGIN TRANSACTION
,CREATE TABLE
enCOMMIT
. - Verwijder alle regels die betrekking hebben op de
sqlite_sequence
tabel (d.w.z.DELETE FROM sqlite_sequence;
). - Voor alle
INSERT INTO "<table_name>" VALUES(...)
instructies, vervang dan de dubbele aanhalingstekens (" "
) voor en na de<table_name>
met backticks (` `
) - bijv.INSERT INTO `table_name` VALUES(...)
.
Sla ten slotte het bestand op als output_after.sql op uw bureaublad.
MySQL-configuratie
Maak de MySQL-database op de externe server. Noteer de databasenaam, gebruikersnaam en wachtwoord. Je kunt je database ook lokaal instellen om te testen, wat ik voor deze tutorial zal gebruiken:
$ mysql.server start
$ mysql -u root -p
Enter password:
mysql> create database migration;
Query OK, 1 row affected (0.03 sec)
mysql> exit;
Configureer uw applicatie om MySQL te gebruiken. Start uw web2py-beheerder. Bewerk db.py :
db = DAL('mysql://<mysql_user>:<mysql_password>@localhost/<mysql_database>')
Sla het bestand op.
Sta web2py toe om de MySQL-database te initialiseren:
- Maak een back-up van de inhoud van
/web2py/applications/<your_application>/databases/
map. Verwijder vervolgens de inhoud van de map. - Terug op de web2py-beheerder. Klik op de knop "databasebeheer" om de tabellen in uw lokale MySQL-database te maken.
Start uw MySQL-database in de terminal om te controleren of de lege tabellen aan de database zijn toegevoegd:
Gegevens toevoegen
Navigeer naar waar u output.sql heeft opgeslagen (moet uw bureaublad zijn), voer vervolgens de volgende opdracht uit om gegevens aan MySQL toe te voegen:
$ mysql -u root migration < output_after.sql
Dit duurt een paar minuten om volledig uit te voeren.
Controleer in de web2py-beheerder uw database en applicatie om er zeker van te zijn dat de nieuwe gegevens toegankelijk zijn.