@@ -260,3 +260,39 @@ class Model(db.Model):
260260 select_col = db .Column (name = db .quoted_name ('select' , False ))
261261 assert select_col .name == 'select'
262262 assert not select_col .name .quote
263+
264+
265+ async def test_overwrite_declared_table_name ():
266+ class MyTableNameMixin :
267+ @db .declared_attr
268+ def __tablename__ (cls ):
269+ return cls .__name__ .lower ()
270+
271+ class MyTableWithoutName (MyTableNameMixin , db .Model ):
272+ id = db .Column (db .Integer , primary_key = True )
273+
274+ class MyTableWithName (MyTableNameMixin , db .Model ):
275+ __tablename__ = 'manually_overwritten_name'
276+ id = db .Column (db .Integer , primary_key = True )
277+
278+ assert MyTableWithoutName .__table__ .name == 'mytablewithoutname'
279+ assert MyTableWithName .__table__ .name == 'manually_overwritten_name'
280+
281+
282+ async def test_multiple_inheritance_overwrite_declared_table_name ():
283+ class MyTableNameMixin :
284+ @db .declared_attr
285+ def __tablename__ (cls ):
286+ return cls .__name__ .lower ()
287+
288+ class AnotherTableNameMixin :
289+ __tablename__ = "static_table_name"
290+
291+ class MyTableWithoutName (AnotherTableNameMixin , MyTableNameMixin , db .Model ):
292+ id = db .Column (db .Integer , primary_key = True )
293+
294+ class MyOtherTableWithoutName (MyTableNameMixin , AnotherTableNameMixin , db .Model ):
295+ id = db .Column (db .Integer , primary_key = True )
296+
297+ assert MyTableWithoutName .__table__ .name == 'static_table_name'
298+ assert MyOtherTableWithoutName .__table__ .name == 'myothertablewithoutname'
0 commit comments