Jeg havde for nylig brug for at konvertere en web2py-baseret CRM-app hostet på en Apache-server med en SQLite-backend til MySQL. Nedenfor er de trin, der virkede for mig. Jeg har oprettet et eksempelprogram til at arbejde med, hvis du gerne vil følge med, du kan downloade alle filer her.
Bemærk venligst:Jeg bruger web2py version 2.4.7 i et Unix-miljø. Før du starter, skal du sørge for, at du har SQLite installeret på dit system. Du kan installere dette med pip, pip install sqlite
, eller du kan få fat i de binære filer på http://sqlite.org/download.html. Du skal også have MySQL installeret. Hvis du har brug for hjælp, så følg selvstudierne her.
Den aktuelle database har alle standard web2py-tabeller samt en bruger tabel med felterne id , startdato og slutdato :
db.define_table(
'users',
Field('start_date','string'),
Field('end_date','string')
)
Denne kode følger web2py DAL-syntaksen. Der er 30.000 rækker med data i tabellen.
Datarensning
Download din applikations seneste SQLite-database. Som standard er det filen med navnet storage.sqlite under mappen "/web2py/applications/
$ sqlite3 storage.sqlite .dump > output_before.sql
Brug en teksteditor til at redigere output_before.sql fil:
- Fjern alle linjer, der starter med
PRAGMA
,BEGIN TRANSACTION
,CREATE TABLE
ogCOMMIT
. - Fjern alle linjer, der vedrører
sqlite_sequence
tabel (dvs.DELETE FROM sqlite_sequence;
). - For alle
INSERT INTO "<table_name>" VALUES(...)
udsagn, skal du erstatte de dobbelte anførselstegn (" "
) før og efter<table_name>
med backticks (` `
) - for eksempel.INSERT INTO `table_name` VALUES(...)
.
Gem endelig filen som output_after.sql på dit skrivebord.
MySQL-opsætning
Opret MySQL-databasen på fjernserveren. Noter databasenavnet, brugernavnet og adgangskoden. Du kan også opsætte din database lokalt til test, som jeg vil bruge til denne øvelse:
$ mysql.server start
$ mysql -u root -p
Enter password:
mysql> create database migration;
Query OK, 1 row affected (0.03 sec)
mysql> exit;
Konfigurer din applikation til at bruge MySQL. Start din web2py-administrator. Rediger db.py :
db = DAL('mysql://<mysql_user>:<mysql_password>@localhost/<mysql_database>')
Gem filen.
Tillad web2py at initialisere MySQL-databasen:
- Sikkerhedskopier indholdet af
/web2py/applications/<your_application>/databases/
folder. Slet derefter indholdet af mappen. - Tilbage på web2py-administratoren. Klik på knappen "databaseadministration" for at oprette tabellerne i din lokale MySQL-database.
Tænd din MySQL-database i terminalen for at kontrollere, om de tomme tabeller blev tilføjet til databasen:
Tilføj data
Naviger til det sted, hvor du gemte output.sql (skal være dit skrivebord), og kør derefter følgende kommando for at tilføje data til MySQL:
$ mysql -u root migration < output_after.sql
Dette vil tage et par minutter at udføre fuldstændigt.
I web2py-administratoren skal du tjekke din database og applikation for at sikre, at de nye data er tilgængelige.