diff --git a/django_example/admin.py b/django_example/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..e3212afc7bdef5c7ae19404cf3604dd3757ebc1f
--- /dev/null
+++ b/django_example/admin.py
@@ -0,0 +1,50 @@
+from django.contrib import admin
+from django.db import models
+from .models import Client, Vehicle, Contract, FamilyReports, BMClass, Claims, BlackBox, Agent, Office
+
+class ClientAdmin(admin.ModelAdmin):
+    model = Client
+    list_display = ('name', 'surname', 'fiscalCode', 'email', 'phoneNumber')
+
+class VehicleAdmin(admin.ModelAdmin):
+    model = Vehicle
+    list_display = ('licensePlate', 'fiscalCode', 'model')
+
+class ContractAdmin(admin.ModelAdmin):
+    model = Contract
+    list_display = ('contractId', 'classBM', 'date', 'clientFiscalCode', 'licensePlate', 'renewal')
+
+class FamilyReportsAdmin(admin.ModelAdmin):
+    model = FamilyReports
+    list_display = ('fiscalCode1', 'fiscalCode2', 'relationship')
+
+class BMClassAdmin(admin.ModelAdmin):
+    model = BMClass
+    list_display = ('BMClass', 'basePremium')
+
+class ClaimsAdmin(admin.ModelAdmin):
+    model = Claims
+    list_display = ('licensePlate', 'totalCompensation', 'date', 'location', 'responsibility', 'compensationTimeDays')
+
+class BlackBoxAdmin(admin.ModelAdmin):
+    model = BlackBox
+    list_display = ('licensePlate', 'clientFiscalCode', 'blackBoxId')
+
+class AgentAdmin(admin.ModelAdmin):
+    model = Agent
+    list_display = ('name', 'surname', 'fiscalCode', 'agentId', 'officeId')
+
+class OfficeAdmin(admin.ModelAdmin):
+    model = Office
+    list_display = ('officeId', 'location')
+
+
+admin.site.register(Client, ClientAdmin)
+admin.site.register(Vehicle, VehicleAdmin)
+admin.site.register(Contract, ContractAdmin)
+admin.site.register(FamilyReports, FamilyReportsAdmin)
+admin.site.register(BMClass, BMClassAdmin)
+admin.site.register(Claims, ClaimsAdmin)
+admin.site.register(BlackBox, BlackBoxAdmin)
+admin.site.register(Agent, AgentAdmin)
+admin.site.register(Office, OfficeAdmin)
diff --git a/django_example/insert.py b/django_example/insert.py
new file mode 100644
index 0000000000000000000000000000000000000000..a20fcf3637a7c85451cb4cae8f02df57061164f7
--- /dev/null
+++ b/django_example/insert.py
@@ -0,0 +1,6 @@
+from insurancedb.models import BMClass
+
+bonus = BMClass(BMClass=2, basePremium=150.00)
+
+bonus.save()
+
diff --git a/django_example/models.py b/django_example/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..9f6cbc31902651e5f53437594db6d27b89965d3d
--- /dev/null
+++ b/django_example/models.py
@@ -0,0 +1,133 @@
+from django.db import models
+from phonenumber_field.modelfields import PhoneNumberField
+from django.core.validators import MaxValueValidator, MinValueValidator
+
+# Create your models here.
+
+SEX = ('M', 'F')
+MARITAL_STATUS = ('celibe', 'coniugato', 'vedovo', 'separato', 'divorziato')
+WHEEL_NUMBER = (2,4)
+FAMILY_REPORTS = ('primo', 'secondo', 'terzo')
+BONUSMALUS_CLASS = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)
+
+
+class Client(models.Model):
+    name = models.CharField(max_length = 20)
+    surname = models.CharField(max_length = 20)
+    fiscalCode =  models.CharField(max_length = 16, primary_key = True)
+    residenceRoad = models.CharField(max_length = 30)
+    streetNumber = models.CharField(max_length = 5)
+    bithDay = models.DateField()
+    sex = models.CharField(max_length=1, choices = [(d,d) for d in SEX])
+    profession = models.CharField(max_length = 50)
+    maritalStatus = models.CharField(max_length = 10, choices = [(d,d) for d in MARITAL_STATUS])
+    phoneNumber = PhoneNumberField(blank = True, null = True)
+    email = models.EmailField(max_length = 70, blank = True, null = True)
+
+    def __str__(self):
+        return "{}, {}, {}".format(self.name, self.surname, self.fiscalCode)
+    class Meta:
+        ordering = ['surname']
+
+
+class Vehicle(models.Model):
+    licensePlate = models.CharField(max_length = 7, primary_key = True)
+    fiscalCode = models.ForeignKey(Client, on_delete = models.CASCADE)
+    engineSize = models.PositiveIntegerField()
+    model = models.CharField(max_length = 50)
+    kmTraveled = models.CharField(max_length = 20)
+    wheelNumber = models.PositiveSmallIntegerField(choices = [(d,d) for d in WHEEL_NUMBER])
+
+    def __str__(self):
+        return self.licensePlate
+
+
+class BMClass(models.Model):
+    BMClass = models.PositiveSmallIntegerField(choices = [(d,d) for d in BONUSMALUS_CLASS], primary_key = True)
+    basePremium = models.FloatField()
+
+    def __str__(self):
+        return "{}, {}".format(self.BMClass, self.basePremium)
+
+
+class Contract(models.Model):
+    contractId = models.CharField(max_length=15, primary_key = True)
+    date = models.DateTimeField(auto_now_add = True)
+    clientFiscalCode = models.ForeignKey(Client, on_delete = models.CASCADE)
+    licensePlate = models.ForeignKey(Vehicle, on_delete = models.CASCADE)
+    renewal = models.BooleanField()
+    classBM = models.ForeignKey(BMClass, null = True, on_delete = models.SET_NULL)
+    totalPremium = models.FloatField(blank = True)
+
+    def __str__(self):
+        return "{} on {}".format(self.clientFiscalCode, self.date.strftime('%d-%m-%Y'))
+
+
+class FamilyReports(models.Model):
+    fiscalCode1 = models.ForeignKey(Client, on_delete = models.CASCADE, related_name = "primo")
+    fiscalCode2 = models.ForeignKey(Client, on_delete = models.CASCADE, related_name = "secondo")
+    relationship = models.CharField(max_length=7, choices = [(d,d) for d in FAMILY_REPORTS])
+
+    class Meta:
+        unique_together = (("fiscalCode1", "fiscalCode2"),)
+
+    def __str__(self):
+        return self.relationship
+
+
+class Claims(models.Model):
+    licensePlate = models.ForeignKey(Vehicle, on_delete = models.CASCADE)
+    totalCompensation = models.FloatField()
+    date = models.DateTimeField(auto_now_add = True)
+    location = models.CharField(max_length = 30)
+    responsibility = models.FloatField(validators = [MinValueValidator(0), MaxValueValidator(100)])
+    compensationTimeDays = models.PositiveIntegerField(blank = True)
+    counterpartLicensePlate = models.CharField(max_length = 7)
+    counterpartInsuranceCompany = models.CharField(max_length = 50)
+    photo = models.ImageField(blank = True, null = True)
+
+    def __str__(self):
+        return "{} paid {}".format(self.licensePlate, self.totalCompensation)
+
+
+class BlackBox(models.Model):
+    blackBoxId = models.CharField(max_length=10, primary_key = True)
+    licensePlate = models.ForeignKey(Vehicle, on_delete = models.CASCADE)
+    clientFiscalCode = models.ForeignKey(Client, on_delete = models.CASCADE)
+    observationDate = models.DateTimeField(auto_now_add = True)
+    kmTraveled = models.FloatField(blank = True)
+    timeTraveledSeconds = models.FloatField(blank = True)
+    provinceTraveled = models.CharField(max_length = 30)
+    nationTraveled =  models.CharField(max_length = 30)
+    hourStarting = models.TimeField(auto_now = True)
+    hourClosing = models.TimeField(auto_now = True)
+    maxVelocity = models.PositiveSmallIntegerField(blank = True)
+    timeVelocityOverLimig = models.FloatField(blank = True)
+    kmVelocityOverLimit  = models.FloatField(blank = True)
+    totalTime = models.FloatField( blank = True)
+
+    def __str__(self):
+        return self.BlackBoxId
+
+
+class Office(models.Model):
+    officeId = models.AutoField(primary_key = True)
+    location = models.CharField(max_length = 30)
+
+    def __str__(self):
+        return "{}, {}".format(self.officeId, self.location)
+
+
+class Agent(models.Model):
+    name = models.CharField(max_length = 20)
+    surname = models.CharField(max_length = 20)
+    fiscalCode =  models.CharField(max_length = 16, primary_key = True)
+    agentId =  models.IntegerField(unique = True)
+    officeId = models.ForeignKey(Office, default = '', on_delete = models.SET_DEFAULT)
+
+    def __str__(self):
+        return "{}, {}, {}".format(self.name, self.surname, self.fiscalCode)
+    class Meta:
+        ordering = ['surname']
+
+
diff --git a/django_example/urls.py b/django_example/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..74a428b2df5b780af553592a1e57adc2b1097ca3
--- /dev/null
+++ b/django_example/urls.py
@@ -0,0 +1,19 @@
+from django.contrib import admin
+from django.urls import path
+from . import views
+from django.views.generic.base import RedirectView
+
+urlpatterns = [
+    path('admin/', admin.site.urls),
+    path('', RedirectView.as_view(url = 'admin/')),
+    path('insurancedb/', views.insurancedb),
+    path('blackbox/', views.blackbox),
+    path('bmclass/', views.bmclass),
+    path('vehicle/', views.vehicle),
+    path('claims/', views.claims),
+    path('client/',  views.client),
+    path('contract/', views.contract),
+    path('familyreports/', views.familyreports),
+    path('agent/', views.agent),
+    path('office/', views.office),
+    path('add/', views.add)]
diff --git a/django_example/views.py b/django_example/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..22a9e1f43c69cc14e88a37ca49fe9de2b7bd5c0b
--- /dev/null
+++ b/django_example/views.py
@@ -0,0 +1,34 @@
+from django.http import HttpResponse
+
+def insurancedb(request):
+    return HttpResponse('insurancedb')
+
+def blackbox(request):
+    return HttpResponse('blackbox')
+
+def bmclass(request):
+    return HttpResponse('bmclass')
+
+def vehicle(request):
+    return HttpResponse('vehicle')
+
+def claims(request):
+    return HttpResponse('claims')
+
+def client(request):
+    return HttpResponse('client')
+
+def contract(request):
+    return HttpResponse('contract')
+
+def familyreports(request):
+    return HttpResponse('familyreports')
+
+def agent(request):
+    return HttpResponse('agent')
+
+def office(request):
+    return HttpResponse('office')
+
+def add(request):
+    return HttpResponse('add')
diff --git a/euclid_example/README.md b/euclid_example/README.md
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ec2f30294bfc943b56383001cfc89a7e50b8f6ac 100644
--- a/euclid_example/README.md
+++ b/euclid_example/README.md
@@ -0,0 +1,33 @@
+# ORM Example - Euclid
+
+    git clone https://www.ict.inaf.it/gitlab/odmc/orm_example.git
+    cd orm_example/euclid_example
+
+Crea l'ambiente di anaconda
+
+    conda create -n euclid_example
+    conda activate euclid_example
+    pip install django-extensions djangorestframework django-composite-field django-url-filter
+
+python manage.py migrate
+
+python manage.py shell
+
+python manage.py runserver
+
+add admin password
+
+
+## Start from scratch
+
+    django-admin startproject euclid_example
+    cd euclid_example
+    python manage.py startapp imagedb
+
+Also in settings.py you have to add the name of the app imagedb
+
+In the imagedb/models.py add the data model classes
+
+Once we have defined our data model in imagedb/models.py we need Django to create the corresponding DB schema
+
+python manage.py makemigrations
diff --git a/sqlalchemy_example/README.md b/sqlalchemy_example/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0fb1f1e09208b53f90c6201cf91810ca248c4e04
--- /dev/null
+++ b/sqlalchemy_example/README.md
@@ -0,0 +1,14 @@
+
+Create the anaconda environment for this set of examples
+
+    conda create -n orm_sqlalchemy sqlalchemy
+
+## # To activate this environment, use
+#
+#     $ conda activate orm_sqlalchemy
+#
+# To deactivate an active environment, use
+#
+#     $ conda deactivate
+
+
diff --git a/sqlalchemy_example/example_1/create.py b/sqlalchemy_example/example_1/create.py
new file mode 100644
index 0000000000000000000000000000000000000000..115a17bec516e7edcc03038ec746e784d3994035
--- /dev/null
+++ b/sqlalchemy_example/example_1/create.py
@@ -0,0 +1,6 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Base
+
+Base.metadata.create_all()
diff --git a/sqlalchemy_example/example_1/filter.py b/sqlalchemy_example/example_1/filter.py
new file mode 100644
index 0000000000000000000000000000000000000000..5cc2ee0f6f857821b671c41c7c5083fb0d403732
--- /dev/null
+++ b/sqlalchemy_example/example_1/filter.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Car
+from mapping import Session
+from sqlalchemy.sql import and_ 
+
+# Create a Session object
+session = Session()
+
+# Query cars with name ending with 'en'
+results = session.query(Car).filter(Car.name.like('%en'))
+
+# Print the results
+print("Cars with name ending with 'en' are:")
+for car in results:
+    print(car.name)
+print()
+
+# Query cars filtered by id
+results = session.query(Car).filter(Car.id.in_([2, 4, 6, 8]))
+
+# Print the results
+print("Cars with id in [2, 4, 6, 8] are:")
+for car in results:
+    print(car.id, car.name)
+print()
+
+# Query cars filtered by price
+results = session.query(Car).filter(and_(Car.price > 10000,
+	                                     Car.price < 40000))
+
+# Print the results
+print("Cars with price between 10000 and 40000 are:")
+for car in results:
+    print(car.name, car.price)
+
+
+# Close session
+session.close()
diff --git a/sqlalchemy_example/example_1/insert.py b/sqlalchemy_example/example_1/insert.py
new file mode 100644
index 0000000000000000000000000000000000000000..9cf45826fbbfde4c6476677bc6494497e5d959cc
--- /dev/null
+++ b/sqlalchemy_example/example_1/insert.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Car
+from mapping import Session
+
+# Create a Session object
+session = Session()
+
+# Add instances of Car objects to the session
+session.add_all(
+   [Car(id=1, name='Audi', price=52642), 
+    Car(id=2, name='Mercedes', price=57127),
+    Car(id=3, name='Skoda', price=9000),
+    Car(id=4, name='Volvo', price=29000),
+    Car(id=5, name='Bentley', price=350000),
+    Car(id=6, name='Citroen', price=21000),
+    Car(id=7, name='Hummer', price=41400),
+    Car(id=8, name='Volkswagen', price=21600)])
+
+# Commit changes to database
+session.commit()
+
+# Close session
+session.close()
diff --git a/sqlalchemy_example/example_1/mapping.py b/sqlalchemy_example/example_1/mapping.py
new file mode 100644
index 0000000000000000000000000000000000000000..037c38c42a7260cf75f3cec33cbe1a711799082f
--- /dev/null
+++ b/sqlalchemy_example/example_1/mapping.py
@@ -0,0 +1,27 @@
+from sqlalchemy import create_engine
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import sessionmaker
+
+from sqlalchemy import Column, Integer, String
+
+
+# Create a new Engine instance. 
+engine = create_engine('sqlite:///example_1.db')
+
+
+# Construct a base class for declarative class definitions
+# and bind it to engine
+Base = declarative_base(engine)
+
+
+# Declarative mapping for Car
+class Car(Base):
+    __tablename__ = "car"
+ 
+    id = Column(Integer, primary_key=True)
+    name = Column(String)  
+    price = Column(Integer)
+
+
+# Create a configurable Session factory.
+Session = sessionmaker(bind=engine)
diff --git a/sqlalchemy_example/example_1/read.py b/sqlalchemy_example/example_1/read.py
new file mode 100644
index 0000000000000000000000000000000000000000..f4a3448360238cc3b06e228f78e9b450d7bb1035
--- /dev/null
+++ b/sqlalchemy_example/example_1/read.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Car
+from mapping import Session
+
+# Create a Session object
+session = Session()
+
+# Query all the cars
+results = session.query(Car).all()
+
+# Print the results
+for car in results:
+    print("The price of", car.name, "is", car.price)
+
+# Close session
+session.close()
diff --git a/sqlalchemy_example/example_2/create.py b/sqlalchemy_example/example_2/create.py
new file mode 100644
index 0000000000000000000000000000000000000000..115a17bec516e7edcc03038ec746e784d3994035
--- /dev/null
+++ b/sqlalchemy_example/example_2/create.py
@@ -0,0 +1,6 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Base
+
+Base.metadata.create_all()
diff --git a/sqlalchemy_example/example_2/filter.py b/sqlalchemy_example/example_2/filter.py
new file mode 100644
index 0000000000000000000000000000000000000000..a51baacb830eff786bfaac525f6a1fb729221b76
--- /dev/null
+++ b/sqlalchemy_example/example_2/filter.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Author, Book
+from mapping import Session
+
+# Create a Session object
+session = Session()
+
+# Query Author to select Lev Tolstoy
+results = session.query(Author).filter(Author.name=="Lev Tolstoy").first()
+
+# Print all books of Lev Tolstoy
+print('Books of Lev Tolstoy are:')
+for book in results.book:
+    print(book.title)
+print()
+
+# Query Book for the book Emma and get its author
+results = session.query(Book).filter(Book.title=="Emma").first()
+
+print('The author of', results.title, 'is', results.author.name)
+
+# Close session
+session.close()
+
diff --git a/sqlalchemy_example/example_2/insert.py b/sqlalchemy_example/example_2/insert.py
new file mode 100644
index 0000000000000000000000000000000000000000..734043ed980259d9e72335522f426e14584c8f74
--- /dev/null
+++ b/sqlalchemy_example/example_2/insert.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Author, Book
+from mapping import Session
+
+# Create a Session object
+session = Session()
+
+# Add instances of Author and Book objects to the session
+session.add_all(
+   [Author(id=1, name='Lev Tolstoy'),
+	Author(id=2, name='Jane Austen'),
+	Author(id=3, name='Charles Dickens'),
+	Book(id=1, title='War and Peace', author_id=1),
+	Book(id=2, title='Anna Karenina', author_id=1),
+	Book(id=3, title='Emma', author_id=2),
+	Book(id=4, title='David Copperfield', author_id=3)])
+
+# Commit changes to database
+session.commit()
+
+# Close session
+session.close()
diff --git a/sqlalchemy_example/example_2/mapping.py b/sqlalchemy_example/example_2/mapping.py
new file mode 100644
index 0000000000000000000000000000000000000000..ab9f931dc18460c289cfe1bf3b884fe79ccf2c3b
--- /dev/null
+++ b/sqlalchemy_example/example_2/mapping.py
@@ -0,0 +1,44 @@
+from sqlalchemy import create_engine, event
+from sqlalchemy.engine import Engine
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy import Column, Integer, String, ForeignKey
+from sqlalchemy.orm import sessionmaker, relationship
+
+from sqlite3 import Connection as SQLite3Connection
+
+# Create a new Engine instance. 
+engine = create_engine('sqlite:///example_2.db')
+
+
+# Construct a base class for declarative class definitions
+# and bind it to engine
+Base = declarative_base(engine)
+
+# Declarative mapping for Author and Book classes
+class Author(Base):
+    __tablename__ = "author"
+
+    id = Column(Integer, primary_key=True)
+    name = Column(String)  
+
+    book = relationship("Book")
+
+class Book(Base):
+    __tablename__ = "book"
+
+    id = Column(Integer, primary_key=True)
+    title = Column(String)      
+    author_id = Column(Integer, ForeignKey("Author.id"))
+
+    author = relationship("Author")
+
+# Enable foreign key constraint in SQLite
+@event.listens_for(Engine, "connect")
+def _set_sqlite_pragma(dbapi_connection, connection_record):
+    if isinstance(dbapi_connection, SQLite3Connection):
+        cursor = dbapi_connection.cursor()
+        cursor.execute("PRAGMA foreign_keys=ON;")
+        cursor.close()
+
+# Create a configurable Session factory.
+Session = sessionmaker(bind=engine)
diff --git a/sqlalchemy_example/example_3/create.py b/sqlalchemy_example/example_3/create.py
new file mode 100644
index 0000000000000000000000000000000000000000..115a17bec516e7edcc03038ec746e784d3994035
--- /dev/null
+++ b/sqlalchemy_example/example_3/create.py
@@ -0,0 +1,6 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Base
+
+Base.metadata.create_all()
diff --git a/sqlalchemy_example/example_3/filter.py b/sqlalchemy_example/example_3/filter.py
new file mode 100644
index 0000000000000000000000000000000000000000..b75bc34593c0e15c198f95ec7df46b56fc6f638b
--- /dev/null
+++ b/sqlalchemy_example/example_3/filter.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Client, Person, Company
+from mapping import Session
+
+# Create a Session object
+session = Session()
+
+# Query Client with address via Flavia
+results = session.query(Client).filter(Client.address=='via Flavia')
+
+# Print results
+print('Clients in via Flavia are:')
+for client in results:
+    if client.type == 'person':
+    	print(client.id, client.name, client.surname)
+    elif client.type == 'company':
+    	print(client.id, client.company_name, client.industry)
+print()
+
+# Query Person with address via Flavia
+results = session.query(Person).filter(Person.address=='via Flavia')
+
+# Print results
+print('Persons in via Flavia are:')
+for client in results:
+    if client.type == 'person':
+    	print(client.id, client.name, client.surname)
+    elif client.type == 'company':
+    	print(client.id, client.company_name, client.industry)
+
+
+# Close session
+session.close()
+
diff --git a/sqlalchemy_example/example_3/insert.py b/sqlalchemy_example/example_3/insert.py
new file mode 100644
index 0000000000000000000000000000000000000000..dd836ca864b7565989f8a6909d4390f3208803f5
--- /dev/null
+++ b/sqlalchemy_example/example_3/insert.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from mapping import Client, Person, Company
+from mapping import Session
+
+# Create a Session object
+session = Session()
+
+# Add instances of Person and Company objects to the session
+session.add_all([
+	Person(name='Mario', surname='Rossi', address='via Giulia'),
+	Person(name='Luigi', surname='Bianchi', address='via Flavia'),
+	Company(company_name='Acegas', industry='multi-utility', address='via del Teatro'),
+	Company(company_name='Illy', industry='coffee', address='via Flavia')
+    ])
+
+# Commit changes to database
+session.commit()
+
+# Close session
+session.close()
diff --git a/sqlalchemy_example/example_3/mapping.py b/sqlalchemy_example/example_3/mapping.py
new file mode 100644
index 0000000000000000000000000000000000000000..da9912fd715893f796e2dccca287c37cad3e25bb
--- /dev/null
+++ b/sqlalchemy_example/example_3/mapping.py
@@ -0,0 +1,54 @@
+from sqlalchemy import create_engine
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy import Column, Integer, String, ForeignKey
+from sqlalchemy.orm import sessionmaker, relationship
+
+# Create a new Engine instance. 
+engine = create_engine('sqlite:///example_3.db')
+
+
+# Construct a base class for declarative class definitions
+# and bind it to engine
+Base = declarative_base(engine)
+
+# Declarative mapping for Client
+class Client(Base):
+    __tablename__ = 'client'
+ 
+    id = Column(Integer, primary_key=True)
+    address = Column(String)
+    type = Column(String)
+
+    __mapper_args__ = {
+        'polymorphic_identity':'client',
+        'polymorphic_on':type
+        }
+
+# Declarative mapping for Person
+class Person(Client):
+    __tablename__ = 'person'
+
+    id = Column(Integer, ForeignKey('client.id'), primary_key=True)
+    name = Column(String)
+    surname = Column(String)
+
+    __mapper_args__ = {
+        'polymorphic_identity':'person',
+    }
+
+# Declarative mapping for Company
+class Company(Client):
+    __tablename__ = 'company'
+
+    id = Column(Integer, ForeignKey('client.id'), primary_key=True)
+    company_name = Column(String)
+    industry = Column(String)
+
+    client = relationship("Client")
+
+    __mapper_args__ = {
+        'polymorphic_identity':'company',
+    }
+
+# Create a configurable Session factory.
+Session = sessionmaker(bind=engine)