Doctrine ne permet pas à l’heure actuelle de se connecter à un serveur Microsoft SQL server. Voici une astuce pour le faire. Continuer la lecture de « Symfony2 ou Silex + Doctrine + Linux connection MSSQL »
Elastix(fop2) export sqlite3 vers mysql
Objectif :
Script qui permet d’exporter tous les contact de FOP2 (sqlite3) vers une table mysql « contact » identique.
Table mysql
– Créer une base de donnée && un utilisateur qui va bien
CREATE DATABASE `contact` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'contact'@'localhost' IDENTIFIED BY 'password'; GRANT USAGE ON `contact`.* TO 'contact'@'localhost' IDENTIFIED BY 'password' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `contact` . * TO 'contact'@'localhost';
– créer une table contact
CREATE TABLE contact ( id integer primary key auto_increment , name varchar(35), last_name varchar(35), telefono varchar(12), extension varchar(7), email varchar(30), iduser int, picture varchar(50), address varchar(100), company varchar(30), notes varchar(200), status varchar(30) );
Script
Dans ledossier /var/www/replicationContact créer un fichier export.sh
Pour info j’ai du utiliser le mot de passe root car dans le script ce user ne fonctionnait pas….
#!/bin/sh date=`date "+%F-%H%M%S"` localDir=/var/www/replicationContact dbDir=/var/www/db dbLogin=contact dbPswd='password' #suppression du csv rm $localDir/transfert.csv #export sqlite3 en csv sqlite3 /var/www/db/address_book.db <<! .mode csv .output /var/www/replicationContact/transfert.csv select * from contact; .exit ! #import du csv dans mysql mysql --user=$dbLogin --password=$dbPswd --database=contact --execute="TRUNCATE TABLE contact.contact; LOAD DATA INFILE '/var/www/replicationContact/transfert.csv' INTO TABLE contact.contact FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n'";
Cron
Penser à faire un cron qui excute export.sh tous les jours.
Vérifier les droits sur le dossier replicationContact et export:
chmod 777 replicationContact chmod 644 export.sh
nano /etc/crontab
10 1 * * * root /bin/sh /var/www/replicationContact/export.sh
Astuce pour tester la mise en place on peut lancer le cron toutes les minutes :
*/1 * * * * root /bin/sh /var/www/replicationContact/export.sh
Mysql : convertir un select en csv
Actuce
Cette astuce permet de générer un fichier csv directement à partir d’une requête mysql.
SELECT champ1, champ3, champ6, champ7 FROM matable INTO OUTFILE '/var/www/replication/transfert.csv' FIELDS ESCAPED BY '' TERMINATED BY ';';
Petit bémol les champs vide sont remplacé par NULL systématiquement.
Perso j’utilise généralement cette astuce dans des bash donc derrière je fais un rechercher/remplacer pour virer les NULL du type :
#conversion des champs NULL en espace
sed -i 's/NULL/ /g' /var/www/replication/transfert.csv
Export mysql vers sqlite3 en shell
Ce tuto permet d’exporter certain champs d’une table mysql et de les importer dans une table sqlite3.
Prérequis :
- Un dossier /var/www/replication/ qui contiendra nos scripts.
- Un dossier /var/www/db/ qui contient les base de données sqlite dont address_book.db qui nous intéresse.
- Une base de donnée mysql avec une table dont on veut exporter des champs
Le dossier replication contiendra 3 fichiers :
- replication.sh : le bash que l’on exécutera
- importer.sql : qui contient les actions sqlite3
- transfert.csv : généré dynamiquement pour le transfert
replication.sh
#!/bin/sh
#definition des variables
date=`date "+%F-%H%M%S"`
localDir=/var/www/replication
dbDir=/var/www/db
dbLogin=monlogin
dbPswd=monpasswordmysql
#suppression du csv
rm $localDir/transfert.csv
#export mysql en csv
mysql --user=$dbLogin --pass=$dbPswd --database=nombase --execute="select champ1, champ3, champ6, champ7 from matable INTO OUTFILE '/var/www/replication/transfert.csv' FIELDS ESCAPED BY '' TERMINATED BY ';';"
#conversion des champs NULL en espace
sed -i 's/NULL/ /g' $localDir/transfert.csv
#import du csv dans sqlite3
sqlite3 $dbDir/address_book.db ".read "$localDir"/importer.sql"
exit 0
importer.sql
DELETE FROM contact;
.mod csv
.separator ;
.import /var/www/replication/transfert.csv contact
transfert.csv
Il contiendra des données au format csv.
SQL ROUND : faire un arrondi sur un nombre
Pour arrondir des colonnes directement dans la requête utilisez la fonction :
ROUND (matable, précision)
Exemple :
select ROUND(Tarif,5) from matable;
SQL CAST: comparer des colonnes de type différents
En SQL pour comparer par exemple des nombres qui sont stockés dans des colonnes de type vachar, vous risquez d’avoir des problème (surtout avec MS SQL). Une astuce :
CAST (matable AS type_à _utiliser_pour_comparer)
Exemple de type :
- real
- int
- decimal(9,7)
- float
ex : soit les colonnes TarifA et TarifB
SELECT * FROM matable WHERE (CAST(TarifA AS real) - CAST(TarifB AS real))> 0;
Perso pour comparer des nombre je prends le type real pour tous.