Created
March 16, 2017 13:58
-
-
Save dianaclarke/4ebd63636bb75fdf4a3909bc7bb0087a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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