Mi dispiace se non è inversa la nomenclatura preferita, che potrebbe aver ostacolato la mia ricerca. In ogni caso, ho a che fare con due classi dichiarative di sqlalchemy, che è una relazione molti-a-molti. Il primo è Account e il secondo è Raccolta. Gli utenti "acquistano" collezioni, ma voglio mostrare le prime 10 collezioni che l'utente non ha ancora acquistato.sqlalchemy many-to-many, ma inversa?
from sqlalchemy import *
from sqlalchemy.orm import scoped_session, sessionmaker, relation
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(bind=engine)
account_to_collection_map = Table('account_to_collection_map', Base.metadata,
Column('account_id', Integer, ForeignKey('account.id')),
Column('collection_id', Integer, ForeignKey('collection.id')))
class Account(Base):
__tablename__ = 'account'
id = Column(Integer, primary_key=True)
email = Column(String)
collections = relation("Collection", secondary=account_to_collection_map)
# use only for querying?
dyn_coll = relation("Collection", secondary=account_to_collection_map, lazy='dynamic')
def __init__(self, email):
self.email = email
def __repr__(self):
return "<Acc(id=%s email=%s)>" % (self.id, self.email)
class Collection(Base):
__tablename__ = 'collection'
id = Column(Integer, primary_key=True)
slug = Column(String)
def __init__(self, slug):
self.slug = slug
def __repr__(self):
return "<Coll(id=%s slug=%s)>" % (self.id, self.slug)
Così, con account.collections, posso ottenere tutte le collezioni, e con dyn_coll.limit (1) .All() posso applicare alla query nell'elenco delle raccolte ... ma come faccio a fare il inverso? Mi piacerebbe avere le prime 10 collezioni che l'account fa non è stata mappata.
Qualsiasi aiuto è incredibilmente apprezzato. Grazie!
Huh. Ovviamente ho molto da imparare su sqlalchemy. :) Grazie! – Hoopes