Skip to content

Instantly share code, notes, and snippets.

@dianaclarke
Created March 16, 2017 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dianaclarke/4ebd63636bb75fdf4a3909bc7bb0087a to your computer and use it in GitHub Desktop.
Save dianaclarke/4ebd63636bb75fdf4a3909bc7bb0087a to your computer and use it in GitHub Desktop.
from sqlalchemy import *
from sqlalchemy import types
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext import hybrid
from datetime import datetime
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
id = Column(types.Integer, primary_key=True)
_name = Column(types.String)
@hybrid.hybrid_property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value.title()
class LoudPerson(Person):
__tablename__ = 'baby'
id = Column(Integer, ForeignKey('person.id'), primary_key=True)
nickname = Column(types.String)
@Person.name.setter
def name(self, value):
self._name = value.upper()
class PythonPerson(object):
def __init__(self):
self._name = ''
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value.title()
class LoudPythonPerson(PythonPerson):
@PythonPerson.name.setter
def name(self, value):
self._name = value.upper()
e = create_engine('sqlite:///:memory:', echo='debug')
Base.metadata.drop_all(e)
Base.metadata.create_all(e)
session = Session(e, autocommit=True, autoflush=False, expire_on_commit=False)
p1 = Person()
p1.name = "diana"
session.add(p1)
session.flush()
p2 = LoudPerson()
p2.name = "gwen"
p2.nickname = "bean"
session.add(p2)
session.flush()
for x in session.query(Person).all():
print "------sql: ", x._name, x.name
for x in session.query(LoudPerson).all():
print "------sql: ", x._name, x.name, x.nickname
p3 = PythonPerson()
p3.name = "mike"
p4 = LoudPythonPerson()
p4.name = "julian"
print "------python: ", p3._name, p3.name
print "------python: ", p4._name, p4.name
# That prints the following
# ------sql: DIANA DIANA <---- I would have expected "Diana Diana"
# ------sql: GWEN GWEN
# ------sql: GWEN GWEN bean
# ------python: Mike Mike
# ------python: JULIAN JULIAN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment