Advertisement
Guest User

MonSQLversSQLite.py

a guest
Jan 30th, 2012
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.36 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #====================================
  3. # MonSQLversSQLite.py
  4. #====================================
  5. #            IMPORTS
  6. import sys
  7. #====================================
  8.  
  9. #====================================
  10. #     DEBUT CLASS MonSQLversSQLite
  11. #====================================
  12. class MonSQLversSQLite:
  13.     def __init__(self):
  14.         self.FichierSource = ""
  15.         self.FichierDestination = ""
  16.         self.EcrireFichier = 0
  17.         self.ModeDebug = 0
  18.         self.SchemaSeulement = 0
  19.         self.ModeDirect = False
  20.  
  21.     def Init(self, Entree, Sortie = '', Debug = False, Schema = 0):
  22.         self.FichierSource = Entree
  23.         if Sortie == '':
  24.             self.EcrireFichier = 0
  25.         else:
  26.             self.EcrireFichier = 1
  27.             self.FichierDestination = Sortie
  28.         if Debug == True:
  29.             self.ModeDebug = 1
  30.         if Schema == 1:
  31.             self.SchemaSeulement = 1
  32.            
  33.     def ExecuterTravail(self):
  34.         f = open(self.FichierSource)
  35.         print "Debut du processus"
  36.         cntr = 0
  37.         ModeInsertion = 0
  38.         ModeCreationTable = 0
  39.         DebutInsertion = "INSERT INTO "
  40.         AI = "auto_increment"
  41.         PK = "PRIMARY KEY "
  42.         IPK = " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL"
  43.         CT = "CREATE TABLE "
  44.         # Debut
  45.         if self.EcrireFichier == 1:
  46.             FichierDest = open(self.FichierDestination,'w')
  47.         while 1:
  48.             ligne = f.readline()
  49.             cntr += 1
  50.             if not ligne:
  51.                 break
  52.             # Ignore les lignes vides, ou qui commencent par "--", ou les commentaires (/*!)
  53.             if ligne.startswith("--"): # Commentaire
  54.                 pass
  55.             elif len(ligne) == 1: # Ligne vide
  56.                 pass
  57.             elif ligne.startswith("/*!"): # Commentaire
  58.                 pass
  59.             elif ligne.startswith("USE"):
  60.                 #Ignore les lignes USE
  61.                 pass
  62.             elif ligne.startswith("CREATE DATABASE "):
  63.                 pass
  64.             elif ligne.startswith(CT):
  65.                 ModeCreationTable = 1
  66.                 longueur1 = len(ligne)
  67.                 ligne = ligne[:longueur1-1]
  68.                 if self.ModeDebug == 1:
  69.                     print "Debut de CREATE TABLE"
  70.                     print ligne
  71.                 if self.EcrireFichier == 1:
  72.                     FichierDest.write(ligne)            
  73.             elif ModeCreationTable == 1:
  74.                 # traite la ligne...
  75.                 if self.ModeDebug == 1:
  76.                     print "Ligne a traiter - {0}".format(ligne)
  77.                 p1 = ligne.find(AI)
  78.                 if ligne.startswith(") "):
  79.                     ModeCreationTable = 0
  80.                     if self.ModeDebug == 1:
  81.                         print "Fin du CREATE TABLE"
  82.                     nouvelleLigne = ");\n"
  83.                     if self.EcrireFichier == 1:
  84.                         FichierDest.write(nouvelleLigne)
  85.                         if self.ModeDebug == 1:
  86.                             print "Ecriture de la ligne {0}".format(nouvelleLigne)
  87.                 elif p1 != -1:
  88.                     # on a une ligne de cle primaire
  89.                     l = ligne.strip()
  90.                     fnpos = l.find(" int(")
  91.                     if fnpos != -1:
  92.                         fn = l[:fnpos]
  93.                     nouvelleLigne = fn + IPK #+ ",\n"
  94.                     if self.EcrireFichier == 1:
  95.                         FichierDest.write(nouvelleLigne)
  96.                         if self.ModeDebug == 1:
  97.                             print "Ecriture de la ligne {0}".format(nouvelleLigne)
  98.                 elif ligne.strip().startswith(PK):
  99.                     pass
  100.                 elif ligne.find(" unsigned ") != -1:
  101.                     ligne = ligne.replace(" unsigned "," ")
  102.                     ligne = ligne.strip()
  103.                     longueur1 = len(ligne)
  104.                     ligne = ligne[:longueur1-1]
  105.                     if self.EcrireFichier == 1:
  106.                         FichierDest.write("," + ligne)
  107.                         if self.ModeDebug == 1:
  108.                             print "Eciture de la ligne {0}".format(ligne)
  109.                 else:
  110.                     longueur1 = len(ligne)
  111.                     ligne = ligne.strip()
  112.                     ligne = ligne[:longueur1-4]
  113.                     if self.ModeDebug == 1:
  114.                         print "," + ligne
  115.                     if self.EcrireFichier == 1:
  116.                         FichierDest.write("," + ligne)
  117.             elif ligne.startswith(DebutInsertion):
  118.                 if ModeInsertion == 0:
  119.                     ModeInsertion = 1
  120.                     # recupere le nom de la table et la liste des champs
  121.                     istatement = ligne
  122.                     # enleve le retour chariot de la ligne istatement
  123.                     l = len(istatement)
  124.                     istatement = istatement[:l-2]
  125.             elif self.SchemaSeulement == 0:
  126.                 if ModeInsertion == 1:
  127.                     posx = ligne.find("');")
  128.                     pos1 = ligne.find("'),")
  129.                     longueur1 = ligne[:pos1]
  130.                     ligne = ligne.replace("\\'","''")
  131.                     if posx != -1:
  132.                         longueur1 = ligne[:posx+3]
  133.                         ModeInsertion = 0
  134.                         if self.ModeDebug == 1:
  135.                             print istatement + longueur1
  136.                             print "------------------------------"
  137.                         if self.EcrireFichier == 1:
  138.                             FichierDest.write(istatement + longueur1+"\n")
  139.                     elif pos1 != -1:
  140.                         longueur1 = ligne[:pos1+2]
  141.                         if self.ModeDebug == 1:
  142.                             print istatement + longueur1 + ";"
  143.                         if self.EcrireFichier == 1:
  144.                             FichierDest.write(istatement + longueur1 + ";\n")
  145.                     else:
  146.                         if self.ModeDebug == 1:
  147.                             print "Test de la ligne {0}".format(ligne)
  148.                         pos1 = ligne.find("),")
  149.                         posx = ligne.find(");")
  150.                         if self.ModeDebug == 1:
  151.                             print "pos1 = {0}, posx = {1}".format(pos1,posx)
  152.                         if pos1 != -1:
  153.                             longueur1 = ligne[:pos1+1]
  154.                             if self.ModeDebug == 1:
  155.                                 print istatement + longueur1 + ";"
  156.                             if self.EcrireFichier == 1:
  157.                                 FichierDest.write(istatement + longueur1 + ";\n")
  158.                         else:
  159.                             ModeInsertion = 0
  160.                             longueur1 = ligne[:posx+1]
  161.                             if self.ModeDebug == 1:
  162.                                 print istatement + longueur1 + ";"
  163.                             if self.EcrireFichier == 1:
  164.                                 FichierDest.write(istatement + longueur1 + ";\n")
  165.         f.close()
  166.         if self.EcrireFichier == 1:
  167.             FichierDest.close()                        
  168.                        
  169.        
  170. def error(message):
  171.     print >> sys.stderr, str(message)    
  172.        
  173. def FaitLe():
  174.     #=======================================
  175.     #            Variables
  176.     #=======================================
  177.     FichierSource = ''
  178.     FichierDest = ''
  179.     Debug = False
  180.     Aide = False
  181.     SchemaSeul = False
  182.     #=======================================
  183.     if len(sys.argv) == 1:
  184.         usage()
  185.     else:
  186.         for a in sys.argv:
  187.             print a
  188.             if a.startswith("FicEntree="):
  189.                 pos = a.find("=")
  190.                 FichierSource = a[pos+1:]
  191.             elif a.startswith("FicSortie="):
  192.                 pos = a.find("=")
  193.                 FichierDest = a[pos+1:]
  194.             elif a == 'Debug':
  195.                 Debug = True
  196.             elif a == 'SchemaSeulement':
  197.                 SchemaSeul = True
  198.             elif a == '-Aide' or a == '-H' or a == '-?':
  199.                 Aide = True
  200.         if Aide == True:
  201.             usage()
  202.         r = MonSQLversSQLite()
  203.         r.Init(FichierSource,FichierDest,Debug,SchemaSeul)
  204.         r.ExecuterTravail()    
  205.    
  206. def usage():
  207.     message = (
  208.        '=======================================================================\n'
  209.         'MonSQLversSQLite - Un convertisseur de bases de donnees\n'
  210.         'Auteur: Greg Walters\n'
  211.         'USAGE:\n'
  212.         'MonSQLversSQLite FicEntree=nomFichier [FicSortie=nomFichier] [SchemaSeulement] [Debug] [-H-Aide-?\n'
  213.         '   avec\n'
  214.         '         FicEntree est le fichier de dump MySQL\n'
  215.         '         FicSortie (optionnel) est le nom du fichier de sortie\n'
  216.         '            (si FicSortie est omis, on suppose une sortie directe vers SQLite)\n'
  217.         '         SchemaSeulement (optionnel) Cree les tables, N\'IMPORTE PAS LES DONNEES\n'
  218.         '         Debug (optionnel) - Affiche les messages de debug\n'
  219.         '         -H or -Aide or -? - Affiche ce message\n'
  220.         'Copyright (C) 2011 par G.D. Walters\n'
  221.         '=======================================================================\n'
  222.         )
  223.     error(message)
  224.     sys.exit(1)        
  225.  
  226. if __name__ == "__main__":
  227.     FaitLe()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement