Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #====================================
- # MonSQLversSQLite.py
- #====================================
- # IMPORTS
- import sys
- #====================================
- #====================================
- # DEBUT CLASS MonSQLversSQLite
- #====================================
- class MonSQLversSQLite:
- def __init__(self):
- self.FichierSource = ""
- self.FichierDestination = ""
- self.EcrireFichier = 0
- self.ModeDebug = 0
- self.SchemaSeulement = 0
- self.ModeDirect = False
- def Init(self, Entree, Sortie = '', Debug = False, Schema = 0):
- self.FichierSource = Entree
- if Sortie == '':
- self.EcrireFichier = 0
- else:
- self.EcrireFichier = 1
- self.FichierDestination = Sortie
- if Debug == True:
- self.ModeDebug = 1
- if Schema == 1:
- self.SchemaSeulement = 1
- def ExecuterTravail(self):
- f = open(self.FichierSource)
- print "Debut du processus"
- cntr = 0
- ModeInsertion = 0
- ModeCreationTable = 0
- DebutInsertion = "INSERT INTO "
- AI = "auto_increment"
- PK = "PRIMARY KEY "
- IPK = " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL"
- CT = "CREATE TABLE "
- # Debut
- if self.EcrireFichier == 1:
- FichierDest = open(self.FichierDestination,'w')
- while 1:
- ligne = f.readline()
- cntr += 1
- if not ligne:
- break
- # Ignore les lignes vides, ou qui commencent par "--", ou les commentaires (/*!)
- if ligne.startswith("--"): # Commentaire
- pass
- elif len(ligne) == 1: # Ligne vide
- pass
- elif ligne.startswith("/*!"): # Commentaire
- pass
- elif ligne.startswith("USE"):
- #Ignore les lignes USE
- pass
- elif ligne.startswith("CREATE DATABASE "):
- pass
- elif ligne.startswith(CT):
- ModeCreationTable = 1
- longueur1 = len(ligne)
- ligne = ligne[:longueur1-1]
- if self.ModeDebug == 1:
- print "Debut de CREATE TABLE"
- print ligne
- if self.EcrireFichier == 1:
- FichierDest.write(ligne)
- elif ModeCreationTable == 1:
- # traite la ligne...
- if self.ModeDebug == 1:
- print "Ligne a traiter - {0}".format(ligne)
- p1 = ligne.find(AI)
- if ligne.startswith(") "):
- ModeCreationTable = 0
- if self.ModeDebug == 1:
- print "Fin du CREATE TABLE"
- nouvelleLigne = ");\n"
- if self.EcrireFichier == 1:
- FichierDest.write(nouvelleLigne)
- if self.ModeDebug == 1:
- print "Ecriture de la ligne {0}".format(nouvelleLigne)
- elif p1 != -1:
- # on a une ligne de cle primaire
- l = ligne.strip()
- fnpos = l.find(" int(")
- if fnpos != -1:
- fn = l[:fnpos]
- nouvelleLigne = fn + IPK #+ ",\n"
- if self.EcrireFichier == 1:
- FichierDest.write(nouvelleLigne)
- if self.ModeDebug == 1:
- print "Ecriture de la ligne {0}".format(nouvelleLigne)
- elif ligne.strip().startswith(PK):
- pass
- elif ligne.find(" unsigned ") != -1:
- ligne = ligne.replace(" unsigned "," ")
- ligne = ligne.strip()
- longueur1 = len(ligne)
- ligne = ligne[:longueur1-1]
- if self.EcrireFichier == 1:
- FichierDest.write("," + ligne)
- if self.ModeDebug == 1:
- print "Eciture de la ligne {0}".format(ligne)
- else:
- longueur1 = len(ligne)
- ligne = ligne.strip()
- ligne = ligne[:longueur1-4]
- if self.ModeDebug == 1:
- print "," + ligne
- if self.EcrireFichier == 1:
- FichierDest.write("," + ligne)
- elif ligne.startswith(DebutInsertion):
- if ModeInsertion == 0:
- ModeInsertion = 1
- # recupere le nom de la table et la liste des champs
- istatement = ligne
- # enleve le retour chariot de la ligne istatement
- l = len(istatement)
- istatement = istatement[:l-2]
- elif self.SchemaSeulement == 0:
- if ModeInsertion == 1:
- posx = ligne.find("');")
- pos1 = ligne.find("'),")
- longueur1 = ligne[:pos1]
- ligne = ligne.replace("\\'","''")
- if posx != -1:
- longueur1 = ligne[:posx+3]
- ModeInsertion = 0
- if self.ModeDebug == 1:
- print istatement + longueur1
- print "------------------------------"
- if self.EcrireFichier == 1:
- FichierDest.write(istatement + longueur1+"\n")
- elif pos1 != -1:
- longueur1 = ligne[:pos1+2]
- if self.ModeDebug == 1:
- print istatement + longueur1 + ";"
- if self.EcrireFichier == 1:
- FichierDest.write(istatement + longueur1 + ";\n")
- else:
- if self.ModeDebug == 1:
- print "Test de la ligne {0}".format(ligne)
- pos1 = ligne.find("),")
- posx = ligne.find(");")
- if self.ModeDebug == 1:
- print "pos1 = {0}, posx = {1}".format(pos1,posx)
- if pos1 != -1:
- longueur1 = ligne[:pos1+1]
- if self.ModeDebug == 1:
- print istatement + longueur1 + ";"
- if self.EcrireFichier == 1:
- FichierDest.write(istatement + longueur1 + ";\n")
- else:
- ModeInsertion = 0
- longueur1 = ligne[:posx+1]
- if self.ModeDebug == 1:
- print istatement + longueur1 + ";"
- if self.EcrireFichier == 1:
- FichierDest.write(istatement + longueur1 + ";\n")
- f.close()
- if self.EcrireFichier == 1:
- FichierDest.close()
- def error(message):
- print >> sys.stderr, str(message)
- def FaitLe():
- #=======================================
- # Variables
- #=======================================
- FichierSource = ''
- FichierDest = ''
- Debug = False
- Aide = False
- SchemaSeul = False
- #=======================================
- if len(sys.argv) == 1:
- usage()
- else:
- for a in sys.argv:
- print a
- if a.startswith("FicEntree="):
- pos = a.find("=")
- FichierSource = a[pos+1:]
- elif a.startswith("FicSortie="):
- pos = a.find("=")
- FichierDest = a[pos+1:]
- elif a == 'Debug':
- Debug = True
- elif a == 'SchemaSeulement':
- SchemaSeul = True
- elif a == '-Aide' or a == '-H' or a == '-?':
- Aide = True
- if Aide == True:
- usage()
- r = MonSQLversSQLite()
- r.Init(FichierSource,FichierDest,Debug,SchemaSeul)
- r.ExecuterTravail()
- def usage():
- message = (
- '=======================================================================\n'
- 'MonSQLversSQLite - Un convertisseur de bases de donnees\n'
- 'Auteur: Greg Walters\n'
- 'USAGE:\n'
- 'MonSQLversSQLite FicEntree=nomFichier [FicSortie=nomFichier] [SchemaSeulement] [Debug] [-H-Aide-?\n'
- ' avec\n'
- ' FicEntree est le fichier de dump MySQL\n'
- ' FicSortie (optionnel) est le nom du fichier de sortie\n'
- ' (si FicSortie est omis, on suppose une sortie directe vers SQLite)\n'
- ' SchemaSeulement (optionnel) Cree les tables, N\'IMPORTE PAS LES DONNEES\n'
- ' Debug (optionnel) - Affiche les messages de debug\n'
- ' -H or -Aide or -? - Affiche ce message\n'
- 'Copyright (C) 2011 par G.D. Walters\n'
- '=======================================================================\n'
- )
- error(message)
- sys.exit(1)
- if __name__ == "__main__":
- FaitLe()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement