Jugando con SQLAlchemy II

written by uve 1 November 2010

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é.