J'ai récemment eu besoin de convertir une application CRM basée sur web2py hébergée sur un serveur Apache avec un backend SQLite vers MySQL. Voici les étapes qui ont fonctionné pour moi. J'ai créé un exemple d'application avec lequel travailler si vous souhaitez suivre, vous pouvez télécharger tous les fichiers ici.
Veuillez noter :j'utilise web2py version 2.4.7 sur un environnement Unix. Avant de commencer, assurez-vous que SQLite est installé sur votre système. Vous pouvez l'installer avec pip,
pip install sqlite
, ou vous pouvez récupérer les fichiers binaires sur http://sqlite.org/download.html. Vous devez également installer MySQL. Si vous avez besoin d'aide, suivez les tutoriels ici.
La base de données actuelle a toutes les tables web2py par défaut ainsi qu'un utilisateurs table avec les champs id , date_début , et end_date :
db.define_table(
'users',
Field('start_date','string'),
Field('end_date','string')
)
Ce code suit la syntaxe DAL de web2py. Il y a 30 000 lignes de données dans le tableau.
Nettoyage des données
Téléchargez la dernière base de données SQLite de votre application. Par défaut, il s'agit du fichier nommé storage.sqlite sous le dossier « /web2py/applications/
$ sqlite3 storage.sqlite .dump > output_before.sql
À l'aide d'un éditeur de texte, modifiez le output_before.sql fichier :
- Supprimer toutes les lignes commençant par
PRAGMA
,BEGIN TRANSACTION
,CREATE TABLE
etCOMMIT
. - Supprimez toutes les lignes relatives à la
sqlite_sequence
table (c'est-à-direDELETE FROM sqlite_sequence;
). - Pour tous les
INSERT INTO "<table_name>" VALUES(...)
instructions, remplacez les guillemets doubles (" "
) avant et après le<table_name>
avec des backticks (` `
) - par exemple.INSERT INTO `table_name` VALUES(...)
.
Enfin, enregistrez le fichier sous output_after.sql sur votre bureau.
Configuration MySQL
Créez la base de données MySQL sur le serveur distant. Notez le nom de la base de données, le nom d'utilisateur et le mot de passe. Vous pouvez également configurer votre base de données localement pour les tests, que j'utiliserai pour ce tutoriel :
$ mysql.server start
$ mysql -u root -p
Enter password:
mysql> create database migration;
Query OK, 1 row affected (0.03 sec)
mysql> exit;
Configurez votre application pour utiliser MySQL. Lancez votre administrateur web2py. Modifier db.py :
db = DAL('mysql://<mysql_user>:<mysql_password>@localhost/<mysql_database>')
Enregistrez le fichier.
Autoriser web2py à initialiser la base de données MySQL :
- Sauvegarder le contenu de
/web2py/applications/<your_application>/databases/
dossier. Supprimez ensuite le contenu du dossier. - Retour sur l'admin de web2py. Cliquez sur le bouton "administration de la base de données" pour créer les tables dans votre base de données MySQL locale.
Lancez votre base de données MySQL dans le terminal pour vous assurer que les tables vides ont été ajoutées à la base de données :
Ajouter des données
Accédez à l'emplacement où vous avez enregistré output.sql (devrait être votre bureau), puis exécutez la commande suivante pour ajouter des données à MySQL :
$ mysql -u root migration < output_after.sql
Cela prendra quelques minutes pour s'exécuter complètement.
Dans l'admin web2py, vérifiez votre base de données et votre application pour vous assurer que les nouvelles données sont accessibles.