Skip to content

Instantly share code, notes, and snippets.

@daaniam
Created May 14, 2023 20:54
Show Gist options
  • Save daaniam/1d8c07ad36587a7fb800fc0db1bdfc46 to your computer and use it in GitHub Desktop.
Save daaniam/1d8c07ad36587a7fb800fc0db1bdfc46 to your computer and use it in GitHub Desktop.
sqlalchemy model resolve table name
import re
from sqlalchemy.orm import DeclarativeBase, declared_attr
def resolve_table_name(name):
"""Resolve table name from Class CamelCase"""
# Match a letter just before an upper-case char
# Example: "Hello World" would match "o" because next "W" is uppercase.
names = re.split("(?=[A-Z])", name)
# Make lowercase tablename with "_" as word separator.
return "_".join([x.lower() for x in names if x])
class CSuiteSABase(DeclarativeBase):
"""Base object used by all database model classes"""
@declared_attr
def __tablename__(self):
return resolve_table_name(self.__name__)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment