/[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 24 - (hide annotations)
Mon Sep 13 15:17:20 2004 UTC (20 years, 3 months ago) by ludwig
File MIME type: text/x-python
File size: 8004 byte(s)

2004-09-13  Ludwig Reiter <ludwig@intevation.de>

        * Konverter/Brandenburg.konf:
	Habe die Konfigurationsdatei auf den Stand gebracht,
  	dass die Daten LKR_EE0001.edb und LKR_EE0002.edb
	im Prinzip eingelesen werden k�nnen.

	* Konverter/edbsclasses.py:
	Nun werden die Winkel und die Attributsdaten auch eingef�hrt in
	die Folientabellen-Insert-Befehle.

	* Tabellen/auto_create_sql.py
	Kleine Fehler behoben: Winkel wird jetzt richtig behandelt.

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 ludwig 24 F für Folientabelle mit Linien- oder Flächengeometrie
51     FP für Folientablle mit Punktgeometrie
52 ludwig 23 Z für Zusatzdatentabelle ohne Geometrie
53 ludwig 24 G für Zusatzdatentabelle mit Geometrie
54     GP für Zusatzdatentabelle mit Punktgeometrie"""
55 ludwig 23 self.Name = Name
56     self.Attribute = []
57     self.Attribute.append( ("objnr", "VARCHAR(7)") )
58 ludwig 24 if ArtderTabelle =="F" or ArtderTabelle == "FP" :
59 ludwig 23 self.Attribute.append( ("objart", "INTEGER" ) )
60     self.Attribute.append( ("aktualitaet", "VARCHAR(2)"))
61     self.Attribute.append( ("edatum", "DATE"))
62 ludwig 24 self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
63     if ArtderTabelle == "FP" :
64     self.Attribute.append( ("winkel", "INTEGER"))
65     elif ArtderTabelle == 'Z' or ArtderTabelle =='G'or ArtderTabelle=="GP":
66 ludwig 23 self.Attribute.append( ("artderinfo", "INTEGER") )
67     self.Attribute.append( ("kartentyp", "VARCHAR(2)" ))
68     self.Attribute.append( ("darstellungsart", "INTEGER" ))
69     if ArtderTabelle == "G":
70     self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
71 ludwig 24 elif ArtderTabelle == "GP":
72     self.Attribute.append( ("geom", "MDSYS.SDO_GEOMETRY") )
73     self.Attribute.append( ("winkel", "INTEGER") )
74 ludwig 23
75     def isin_Attribute(self, Attribut):
76     """sucht self.Attribute nach den Attribut durch:
77     1 falls vorhanden
78     0 sonst"""
79     for (Attname,dummy) in self.Attribute:
80     if Attname == Attribut:
81     return 1
82     return 0
83    
84     def append_Attribut(self, Atttupel):
85     """fügt ein Attributtupel der Form ( Attributsnamen, Attributsart) in
86     self.Attribute ein, wenn noch nicht vorhanden."""
87     if not self.isin_Attribute( Atttupel[0]) and Atttupel[0] != "":
88     self.Attribute.append( Atttupel )
89    
90     def get_Name(self):
91     """Gibt self.Name zurück"""
92     return self.Name
93    
94     def create_SQL(self):
95     """erzeugt das CREATE-SQL-Kommando und gibt es zurück"""
96     SQL_Kom ="CREATE TABLE "
97     SQL_Kom += self.Name
98     SQL_Kom += "\n ( "
99     Komma =0
100     for (Attname, Attart) in self.Attribute: #Attname für Attributname
101     if Komma ==1: #Attart für Attributsart
102     SQL_Kom += ","
103     SQL_Kom += "\n "
104     SQL_Kom += Attname
105     SQL_Kom += " "
106     SQL_Kom += Attart
107     Komma =1
108     SQL_Kom += "\n ); \n"
109     return SQL_Kom
110    
111     def name_in_tablist( Name):
112     """Schaut ob Name in einer Tabelle Tab in tablist der Name ist.
113     Gibt dann Tab zurück"""
114     for tab in tablist:
115     if Name == tab.get_Name():
116     return tab
117     return 0
118    
119     def eintragen_Attribute( Name, Komma_split, Art):
120     """Trägt die Attribute in die Tabellen ein und legt die Tabellen an, falls
121     noch nicht vorhanden"""
122     if not name_in_tablist(Name):
123     Tabobj =Tab( Name , Art)
124     tablist.append( Tabobj )
125     else:
126     Tabobj = name_in_tablist( Name)
127     Attributlist = Komma_split[5].split(";")
128     for n in range( len( Attributlist )/2):
129     Tabobj.append_Attribut( (Attributlist[2*n],
130     "VARCHAR(" + Attributlist[2*n +1].strip()+")"))
131    
132     # Initialisierung der tablist.
133     tablist =[]
134     try:
135     quelle = open( sys.argv[1] , "r" )
136     Konf_satz_liste = quelle.readlines()
137     finally:
138     quelle.close()
139     for Konf_satz in Konf_satz_liste:
140     if Konf_satz[0] =='#':
141     continue
142     Komma_split = Konf_satz.split(",")
143     if len(Komma_split) != 6:
144     print "warning: Die Konfigurationsdatei könnte falsch sein" + str(Komma_split)
145     continue
146     if Komma_split[1] =="" and Komma_split[2] =="":
147     Name = "folie" + Komma_split[0]
148     if "n" in Komma_split[4] and not name_in_tablist(Name):
149     tablist.append( Tab( Name ,"F"))
150     if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
151 ludwig 24 tablist.append( Tab( Name+"_p" ,"FP"))
152 ludwig 23 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
153     tablist.append( Tab( Name+"_l" ,"F"))
154     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
155     tablist.append( Tab( Name+"_f" ,"F"))
156     elif Komma_split[3] == "":
157     Name = "folie" + Komma_split[0]
158     if "n" in Komma_split[4]:
159 ludwig 24 eintragen_Attribute( Name ,Komma_split, "F")
160 ludwig 23 if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
161 ludwig 24 eintragen_Attribute( Name+"_p" ,Komma_split,"FP")
162 ludwig 23 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
163     eintragen_Attribute( Name+"_l" ,Komma_split,"F")
164     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
165     eintragen_Attribute( Name+"_f" ,Komma_split,"F")
166     else:
167     Name = Komma_split[3]
168     if "n" in Komma_split[4]:
169     eintragen_Attribute( Name ,Komma_split, "Z")
170     if "p" in Komma_split[4] and not name_in_tablist(Name+"_p"):
171 ludwig 24 eintragen_Attribute( Name+"_p" ,Komma_split,"GP")
172 ludwig 23 if "l" in Komma_split[4] and not name_in_tablist(Name +"_l"):
173     eintragen_Attribute( Name+"_l" ,Komma_split,"G")
174     if "f" in Komma_split[4] and not name_in_tablist(Name +"_f"):
175     eintragen_Attribute( Name+"_f" ,Komma_split,"G")
176    
177     SQL_Kom = ""
178     for tab in tablist:
179     SQL_Kom += tab.create_SQL()
180     try:
181     ziel = open( sys.argv[2] , "w" )
182     ziel.write(SQL_Kom)
183     finally:
184     ziel.close()
185    
186    
187    

Properties

Name Value
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26