Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- person = {
- 'name': 'John Doe',
- 'email': 'johndoe@email.com',
- 'age': 50,
- 'connected': False
- }
- dict_a = {
- 'name': {
- 'first_name': 'John',
- 'last_name': 'Doe'
- },
- 'workEmail': 'johndoe@email.com',
- 'age': 50,
- 'connected': False
- }
- dict_b = {
- 'fullName': 'John Doe',
- 'workEmail': 'johndoe@email.com',
- 'age': 50,
- 'connected': False
- }
- """
- Database mapping declarations for SQLAlchemy
- """
- from sqlalchemy import Column, Integer, String, Boolean
- from database.connection import Base
- class PersonModel(Base):
- __tablename__ = 'Person'
- id = Column(Integer, primary_key=True)
- name = Column(String)
- email = Column(String)
- age = Column(Integer)
- connected = Column(Boolean)
- """
- Data mappers for Person
- """
- # Abstract class for mapper
- class Mapper(object):
- def __init__(self, data):
- self.data = data
- # Data mapper for format A, maps the fields from dict_a to Person
- class MapperA(Mapper):
- def __init__(self, data):
- self.name = ' '.join([data.get('name').get(key) for key in ['first_name', 'last_name']])
- self.email = data.get('workEmail')
- self.age = data.get('age')
- self.connected = data.get('connected')
- @classmethod
- def is_mapper_for(cls, data):
- return all(key in data for key in ('name', 'workEmail'))
- # Data mapper for format B, maps the fields from dict_b to Person
- class MapperB(Mapper):
- def __init__(self, data):
- self.name = data.get('fullName')
- self.email = data.get('workEmail')
- self.age = data.get('age')
- self.connected = data.get('connected')
- @classmethod
- def is_mapper_for(cls, data):
- return all(key in data for key in ('fullName', 'workEmail'))
- # Creates a Person instance base on the input data mapping
- def Person(data):
- for cls in Mapper.__subclasses__():
- if cls.is_mapper_for(data):
- return cls(data)
- raise NotImplementedError
- if __name__ == '__main__':
- from database.connection import make_session
- from database.models import PersonModel
- # Sample data for example
- dict_a = {
- 'name': {
- 'first_name': 'John',
- 'last_name': 'Doe'
- },
- 'workEmail': 'johndoe@email.com',
- 'age': 50,
- 'connected': False
- }
- dict_b = {
- 'fullName': 'John Doe',
- 'workEmail': 'johndoe@email.com',
- 'age': 50,
- 'connected': False
- }
- # Instantiate Person from data
- persons = [Person(data) for data in [dict_a, dict_b]]
- # Store persons that fit the database model
- persons = [PersonModel(**person.__dict__) for person in persons]
- with make_session() as session:
- session.add_all(persons)
- session.commit()
Add Comment
Please, Sign In to add comment