Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from sqlalchemy import create_engine, text
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy.orm import scoped_session, sessionmaker
- from sqlalchemy.ext.automap import automap_base
- import re
- import inflect
- import warnings
- from sqlalchemy import inspect
- #name overriding
- def name_for_scalar_relationship(base, local_cls, referred_cls, constraint):
- name = referred_cls.__name__.lower()
- local_table = local_cls.__table__
- if name in local_table.columns:
- newname = name + "_"
- warnings.warn(
- "Already detected name %s present. using %s" %
- (name, newname))
- return newname
- return name
- def camelize_classname(base, tablename, table):
- "Produce a 'camelized' class name, e.g. "
- "'words_and_underscores' -> 'WordsAndUnderscores'"
- return str(tablename[0].upper() + \
- re.sub(r'_([a-z])', lambda m: m.group(1).upper(), tablename[1:]))
- _pluralizer = inflect.engine()
- def pluralize_collection(base, local_cls, referred_cls, constraint):
- "Produce an 'uncamelized', 'pluralized' class name, e.g. "
- "'SomeTerm' -> 'some_terms'"
- referred_name = referred_cls.__name__
- uncamelized = re.sub(r'[A-Z]',
- lambda m: "_%s" % m.group(0).lower(),
- referred_name)[1:]
- pluralized = _pluralizer.plural(uncamelized)
- return pluralized
- engine = create_engine(
- "mysql+pymysql://mydb@localhost:port/tablename", convert_unicode=True)
- db_session = scoped_session(sessionmaker(autocommit=False,
- autoflush=False,
- bind=engine))
- #Mapping
- Base = automap_base()
- Base.prepare(engine, reflect=True, name_for_scalar_relationship = name_for_scalar_relationship, classname_for_table=camelize_classname, name_for_collection_relationship=pluralize_collection)
- #Test
- Buyer = Base.classes.Buyer
- inst = inspect(Buyer)
- attr_names = [c_attr.key for c_attr in inst.mapper.column_attrs] #ERROR
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement