0
我有用戶和實體(多到多),並使用SQLAlchemy的,這個模型:查詢相關實體(多到多)
from sqlalchemy import Table, Column, Unicode, Integer, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker
from zope.sqlalchemy import ZopeTransactionExtension
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()
users_entities = Table('users_entities', Base.metadata,
Column('userID', Integer, ForeignKey('users.id')),
Column('entitieID', Integer, ForeignKey('entities.id'))
)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(Unicode(20))
password = Column(Unicode(101))
entities = relationship("Entities", secondary=users_entities)
def __init__(self, username, password):
self.username = username
self.password = password
class Entities(Base):
__tablename__ = 'entities'
id = Column(Integer, primary_key=True)
name = Column(Unicode(20))
descr = Column(Unicode(101))
url = Column(Unicode(101))
def __init__(self, name, descr, url):
self.name = name
self.descr = descr
self.url = url
所以,當我使用:
user = dbsession.query(User).filter_by(id=session["userID"]).first()
entities = user.entities
我得到的user
與用戶數據,以及entities
(user.entities
)與用戶的所有實體。
而是獲得所有實體,現在我需要從用戶那裏得到的實體,其中ID是= X 東西會像這樣工作:
user.query(Entities).filter_by(id=X)
我無法找到一個簡單的(「最好」)的方式來做到這一點,我錯過了什麼?
它的工作原理,感謝關於使用「get」的提示,唯一的問題是我使用了user.entities.get(X),但即使不是用戶擁有,也給了我實體,但是「user」。 entities.filter_by(id = X)「工作得很好,謝謝! – Joaolvcm