Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.02 KB | None | 0 0
  1. from sqlalchemy import create_engine, text
  2. from sqlalchemy.ext.declarative import declarative_base
  3. from sqlalchemy.orm import scoped_session, sessionmaker
  4. from sqlalchemy.ext.automap import automap_base
  5. import re
  6. import inflect
  7. import warnings
  8. from sqlalchemy import inspect
  9.  
  10. #name overriding
  11. def name_for_scalar_relationship(base, local_cls, referred_cls, constraint):
  12.     name = referred_cls.__name__.lower()
  13.     local_table = local_cls.__table__
  14.     if name in local_table.columns:
  15.         newname = name + "_"
  16.         warnings.warn(
  17.             "Already detected name %s present.  using %s" %
  18.             (name, newname))
  19.         return newname
  20.     return name
  21.  
  22. def camelize_classname(base, tablename, table):
  23.     "Produce a 'camelized' class name, e.g. "
  24.     "'words_and_underscores' -> 'WordsAndUnderscores'"
  25.  
  26.     return str(tablename[0].upper() + \
  27.             re.sub(r'_([a-z])', lambda m: m.group(1).upper(), tablename[1:]))
  28.  
  29. _pluralizer = inflect.engine()
  30. def pluralize_collection(base, local_cls, referred_cls, constraint):
  31.     "Produce an 'uncamelized', 'pluralized' class name, e.g. "
  32.     "'SomeTerm' -> 'some_terms'"
  33.  
  34.     referred_name = referred_cls.__name__
  35.     uncamelized = re.sub(r'[A-Z]',
  36.                          lambda m: "_%s" % m.group(0).lower(),
  37.                          referred_name)[1:]
  38.     pluralized = _pluralizer.plural(uncamelized)
  39.     return pluralized
  40.  
  41.  
  42. engine = create_engine(
  43.     "mysql+pymysql://mydb@localhost:port/tablename", convert_unicode=True)
  44.  
  45. db_session = scoped_session(sessionmaker(autocommit=False,
  46.                                          autoflush=False,
  47.                                          bind=engine))
  48. #Mapping
  49. Base = automap_base()
  50. Base.prepare(engine, reflect=True, name_for_scalar_relationship = name_for_scalar_relationship, classname_for_table=camelize_classname, name_for_collection_relationship=pluralize_collection)
  51.  
  52. #Test
  53. Buyer = Base.classes.Buyer
  54.  
  55. inst = inspect(Buyer)
  56. attr_names = [c_attr.key for c_attr in inst.mapper.column_attrs] #ERROR
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement