@@ -114,16 +114,21 @@ def __repr__(self):
114114 tables = self .get_many_to_many_tables ()
115115 models = self .models
116116
117+
117118 s = StringIO ()
118119 engine = self .config .engine
119120 if not isinstance (engine , basestring ):
120121 engine = str (engine .url )
121122 s .write (constants .HEADER_DECL % engine )
122123 if 'postgres' in engine :
123124 s .write (constants .PG_IMPORT )
125+
126+ self .used_table_names = []
124127 for table in tables :
125- s .write ('%s = %s\n \n ' % (table .name , self ._table_repr (table )))
126-
128+ table_name = self .find_new_name (table .name , self .used_table_names )
129+ self .used_table_names .append (table_name )
130+ s .write ('%s = %s\n \n ' % (table_name , self ._table_repr (table )))
131+
127132 for model in models :
128133 s .write (model .__repr__ ())
129134 s .write ("\n \n " )
@@ -140,14 +145,30 @@ def tables(self):
140145
141146 @property
142147 def models (self ):
148+ self .used_model_names = []
149+ self .used_table_names = []
143150 return sorted ((self .create_model (table ) for table in self .get_non_many_to_many_tables ()), by__name__ )
144151
152+ def find_new_name (self , prefix , used , i = 0 ):
153+ if i != 0 :
154+ prefix = "%s%d" % (prefix , i )
155+ if prefix in used :
156+ prefix = prefix
157+ return self .find_new_name (prefix , used , i + 1 )
158+ return prefix
159+
160+
145161 def create_model (self , table ):
146162 #partially borrowed from Jorge Vargas' code
147163 #http://dpaste.org/V6YS/
148164
149- model_name = name2label (table .name )
165+ model_name = self .find_new_name (name2label (table .name ), self .used_model_names )
166+ self .used_model_names .append (model_name )
150167 is_many_to_many_table = self .is_many_to_many_table (table )
168+ table_name = self .find_new_name (table .name , self .used_table_names )
169+ self .used_table_names .append (table_name )
170+
171+
151172 class Temporal (self .DeclarativeBase ):
152173 __table__ = table
153174
@@ -169,13 +190,14 @@ def _relation_repr(cls, rel):
169190
170191 @classmethod
171192 def __repr__ (cls ):
193+
172194 mapper = class_mapper (cls )
173195 s = ""
174196 s += "class " + model_name + '(DeclarativeBase):\n '
175197 if is_many_to_many_table :
176- s += " __table__ = %s\n \n " % table . name
198+ s += " __table__ = %s\n \n " % table_name
177199 else :
178- s += " __tablename__ = '%s'\n \n " % table . name
200+ s += " __tablename__ = '%s'\n \n " % table_name
179201 if hasattr (cls , '__table_args__' ):
180202 s += " __table_args__ = %s" % cls .__table_args__
181203 s += " #column definitions\n "
@@ -204,7 +226,7 @@ def __repr__(cls):
204226 for column in self .get_foreign_keys (table ):
205227 related_table = column .foreign_keys [0 ].column .table
206228 backref_name = plural (table .name )
207- setattr (Temporal , related_table .name , _deferred_relation (Temporal , relation (name2label (related_table .name , related_table .schema ), backref = backref ( backref_name ) )))
229+ setattr (Temporal , related_table .name , _deferred_relation (Temporal , relation (name2label (related_table .name , related_table .schema ))))
208230
209231 #add in many-to-many relations
210232 for join_table in self .get_related_many_to_many_tables (table .name ):
0 commit comments