Jugando con SQLAlchemy II
Lo que acabo de explicar nos permite trabajar directamente sobre SQLAlchemy, cono todo lo que ello conlleva. Pero tenemos otra posibilidad, trabajar como un ORM puramente. Para ello, SQLAlchemy ofrece una extensión, en el paquete ext.
Veamos el mismo ejemplo, pero a través de la extensión declarative:
from sqlalchemy import Column
from sqlalchemy import Integer, String, Text, DateTime
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Activity(Base):
__tablename__ = 'activities'
id = Column(Integer, primary_key=True)
name = Column(String(80))
description = Column(Text, nullable=True)
schedule = Column(DateTime, nullable=True)
def __repr__(self):
return "<Activity('%s')>" % self.name
class Chunck(Base):
__tablename__ = 'chunks'
id = Column(Integer, primary_key=True)
description = Column(Text)
activity_id = Column(None, ForeignKey('activities.id'), nullable=True)
def __repr__(self):
return "<Chunk('%s')>" % self.description
Y para terminar el artículo, un pequeño comentario acerca de las relaciones sobre tablas. SQLAlchemy ofrece un sistema para facilitar el acceso a objetos relacionados:
from sqlalchemy import relationship
class Activity(Base):
__tablename__ = 'activities'
...
chunks = relation('Chunk', order_by='Chunk.id', backref='activity')
class Chunck(Base):
__tablename__ = 'chunks'
...
activity = relation(Activity, backref=backref('chunks', order_by=id))
Mejor, ¿verdad?
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
