Skip to content

Instantly share code, notes, and snippets.

@sugiana
Created September 16, 2013 09:19
Show Gist options
  • Save sugiana/6578381 to your computer and use it in GitHub Desktop.
Save sugiana/6578381 to your computer and use it in GitHub Desktop.
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class BaseModel(object):
id = Column(Integer, primary_key=True)
def to_dict(self):
values = {}
for column in self.__table__.columns:
values[column.name] = getattr(self, column.name)
return values
def from_dict(self, values):
for column in self.__table__.columns:
if column.name in values:
setattr(self, column.name, values[column.name])
class User(Base, BaseModel):
__tablename__ = 'users'
name = Column(String(30), nullable=False, unique=True)
fullname = Column(String(30))
password = Column(String(30))
db_url = 'postgresql://sugiana:secret@localhost/test'
engine = create_engine(db_url)
Base.metadata.create_all(engine)
BaseSession = sessionmaker(bind=engine)
DBSession = BaseSession()
data = dict(name = 'sugiana', fullname = 'Owo Sugiana', wrong='Wrong field')
user = DBSession.query(User).filter_by(name=data['name']).first()
if user:
print('Already exists: %s' % user.to_dict())
else:
user = User()
user.from_dict(data)
print('Before commit: %s' % user.to_dict())
DBSession.add(user)
DBSession.commit()
print('After commit: %s' % user.to_dict())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment