/[edbsilon]/trunk/edbsilon/Tabellen/auto_create_oracle.py
ViewVC logotype

Annotation of /trunk/edbsilon/Tabellen/auto_create_oracle.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 23 - (hide annotations)
Mon Sep 13 10:51:18 2004 UTC (20 years, 3 months ago) by ludwig
File MIME type: text/x-python
File size: 7508 byte(s)
2004-09-13  Ludwig Reiter <ludwig@intevation.de>

        * Tabellen/auto_create_oracle.py:
	Initial import

1 ludwig 23 # Copyright (C) 2004 by Intevation GmbH
2     # Authors:
3     # Ludwig Reiter <[email protected]>
4     #
5     # This program is free software under the GPL (>=v2)
6     # Read the file COPYING coming with the software for details.
7    
8     """Erzeugt automatisch CREATE-SQL-Kommandos aus dem Konfigurationsfile.
9     Benötigt 2 Argumente : Quell-Konffile Ziel-SQLfile
10     Beinhaltet Klasse Tab für Tabellen
11     und Liste tablist für die verschiedenen Tabellenobjekte
12    
13     Liest eine Zeile des Konffiles und bearbeitet sie:
14     Wenn Kommentar:
15     nächste Zeile
16     Wenn Folienspezifikation(d.h. nur Folie und Tabellenflags gesetzt):
17     Wenn Folientabellen alle vorhanden
18     nächste Zeile
19     Sonst lege zusätzliche Tabellen an
20     (d.h. Tab anlegen und in tablist appenden)
21     Wenn BesondereInfospezifikation ohne Tabellenname:
22     Gehe die Folientabellen in tabliste durch und lege die
23     Attribute an, falls sie noch nicht vorhanden
24     Wenn BesondereInfospezifikation mit Tabellenname:
25     Wenn Tabelle noch nicht vorhanden:
26     Lege Tabelle an und appende sie in tablist
27     Wenn Attribute noch nicht vorhanden:
28     Lege Attribute in der Tabelle an
29     Nach diesen Durchlauf müssten alle anzulegenden Tabellen mit ihren
30     Attributen in tablist als Tab-Objekte stehen
31     Gehe tablist durch und erzeuge die SQL_Kommandos
32    
33     Folientabellen haben die Namen folie<foliennr><p oder l oder f>
34     und mindestens die Attribute objnr, objart, aktualitaet, edatum, geom.
35    
36     anderen Tabellen haben mindestens die Attribute objnr, artderinfo,
37     kartentyp, darstellungsart.
38     """
39    
40     import sys
41    
42     class Tab:
43     """Kontainer für den Tabellennamen und die Attribute + Art der Attribute
44     einer Tabelle. Speichert dies solange bis alle Konfigurationsdateizeilen
45     verarbeitet sind. Dann wird mit SQL_create die SQL -Create-Kommandos
46     erzeugt."""
47     def __init__(self, Name, ArtderTabelle):
48     """Name ist der Name der Tabelle
49     ArtderTabelle gibt an was für eine Tabelle erzeugt werden soll:
50     F für Folientabelle
51     Z für Zusatzdatentabelle ohne Geometrie
52     G für Zusatzdatentabelle mit Geometrie"""
53     self.Name = Name
54     self.Attribute = []
55     self.Attribute.append( ("objnr", "VARCHAR(7)") )
56     if ArtderTabelle == "F":
57     self.Attribute.append( ("objart", "INTEGER" ) )
58     self.Attribute.append( ("aktualitaet", "VARCHAR(2)"))
59     self.Attribute.append( ("edatum", "DATE"))
60     self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
61     elif ArtderTabelle in ['Z','G']:
62     self.Attribute.append( ("artderinfo", "INTEGER") )
63     self.Attribute.append( ("kartentyp", "VARCHAR(2)" ))
64     self.Attribute.append( ("darstellungsart", "INTEGER" ))
65     if ArtderTabelle == "G":
66     self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
67    
68     def isin_Attribute(self, Attribut):
69     """sucht self.Attribute nach den Attribut durch:
70     1 falls vorhanden
71     0 sonst"""
72     for (Attname,dummy) in self.Attribute:
73     if Attname == Attribut:
74     return 1
75     return 0
76    
77     def append_Attribut(self, Atttupel):
78     """fügt ein Attributtupel der Form ( Attributsnamen, Attributsart) in
79     self.Attribute ein, wenn noch nicht vorhanden."""
80     if not self.isin_Attribute( Atttupel[0]) and Atttupel[0] != "":
81     self.Attribute.append( Atttupel )
82    
83     def get_Name(self):
84     """Gibt self.Name zurück"""
85     return self.Name
86    
87     def create_SQL(self):
88     """erzeugt das CREATE-SQL-Kommando und gibt es zurück"""
89     SQL_Kom ="CREATE TABLE "
90     SQL_Kom += self.Name
91     SQL_Kom += "\n ( "
92     Komma =0
93     for (Attname, Attart) in self.Attribute: #Attname für Attributname
94     if Komma ==1: #Attart für Attributsart
95     SQL_Kom += ","
96     SQL_Kom += "\n "
97     SQL_Kom += Attname
98     SQL_Kom += " "
99     SQL_Kom += Attart
100     Komma =1
101     SQL_Kom += "\n ); \n"
102     return SQL_Kom
103    
104     def name_in_tablist( Name):
105     """Schaut ob Name in einer Tabelle Tab in tablist der Name ist.
106     Gibt dann Tab zurück"""
107     for tab in tablist:
108     if Name == tab.get_Name():
109     return tab
110     return 0
111    
112     def eintragen_Attribute( Name, Komma_split, Art):
113     """Trägt die Attribute in die Tabellen ein und legt die Tabellen an, falls
114     noch nicht vorhanden"""
115     if not name_in_tablist(Name):
116     Tabobj =Tab( Name , Art)
117     tablist.append( Tabobj )
118     else:
119     Tabobj = name_in_tablist( Name)
120     Attributlist = Komma_split[5].split(";")
121     for n in range( len( Attributlist )/2):
122     Tabobj.append_Attribut( (Attributlist[2*n],
123     "VARCHAR(" + Attributlist[2*n +1].strip()+")"))
124    
125     # Initialisierung der tablist.
126     tablist =[]
127     try:
128     quelle = open( sys.argv[1] , "r" )
129     Konf_satz_liste = quelle.readlines()
130     finally:
131     quelle.close()
132     for Konf_satz in Konf_satz_liste:
133     if Konf_satz[0] =='#':
134     continue
135     Komma_split = Konf_satz.split(",")
136     if len(Komma_split) != 6:
137     print "warning: Die Konfigurationsdatei könnte falsch sein" + str(Komma_split)
138     continue
139     if Komma_split[1] =="" and Komma_split[2] =="":
140     Name = "folie" + Komma_split[0]
141     if "n" in Komma_split[4] and not name_in_tablist(Name):
142     tablist.append( Tab( Name ,"F"))
143     if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
144     tablist.append( Tab( Name+"_p" ,"F"))
145     if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
146     tablist.append( Tab( Name+"_l" ,"F"))
147     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
148     tablist.append( Tab( Name+"_f" ,"F"))
149     elif Komma_split[3] == "":
150     Name = "folie" + Komma_split[0]
151     if "n" in Komma_split[4]:
152     eintragen_Attribute( Name ,Komma_split)
153     if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
154     eintragen_Attribute( Name+"_p" ,Komma_split,"F")
155     if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
156     eintragen_Attribute( Name+"_l" ,Komma_split,"F")
157     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
158     eintragen_Attribute( Name+"_f" ,Komma_split,"F")
159     else:
160     Name = Komma_split[3]
161     if "n" in Komma_split[4]:
162     eintragen_Attribute( Name ,Komma_split, "Z")
163     if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
164     eintragen_Attribute( Name+"_p" ,Komma_split,"G")
165     if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
166     eintragen_Attribute( Name+"_l" ,Komma_split,"G")
167     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
168     eintragen_Attribute( Name+"_f" ,Komma_split,"G")
169    
170     SQL_Kom = ""
171     for tab in tablist:
172     SQL_Kom += tab.create_SQL()
173     try:
174     ziel = open( sys.argv[2] , "w" )
175     ziel.write(SQL_Kom)
176     finally:
177     ziel.close()
178    
179    
180    

Properties

Name Value
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26