मॉडल
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey
from sqlalchemy import Integer
from sqlalchemy import Unicode
from sqlalchemy import TIMESTAMP
from sqlalchemy.orm import relationship
BaseModel = declarative_base()
class Base(BaseModel):
__tablename__ = 'base'
id = Column(Integer, primary_key=True)
location = Column(Unicode(12), ForeignKey("locationterrain.location"), unique=True,)
name = Column(Unicode(45))
ownerid = Column(Integer,ForeignKey("player.id"))
occupierid = Column(Integer, ForeignKey("player.id"))
submitid = Column(Integer,ForeignKey("player.id"))
updateid = Column(Integer,ForeignKey("player.id"))
owner = relationship("Player",
primaryjoin='Base.ownerid==Player.id',
join_depth=3,
lazy='joined')
occupier= relationship("Player",
primaryjoin='Base.occupierid==Player.id',
join_depth=3,
lazy='joined')
submitter = relationship("Player",
primaryjoin='Base.submitid== Player.id',
join_depth=3,
lazy='joined')
updater= relationship("Player",
primaryjoin='Base.updateid== Player.id',
join_depth=3,
lazy='joined')
class Player(BaseModel):
__tablename__ = 'player'
id = Column(Integer, ForeignKey("guildmember.playerid"), primary_key=True)
name = Column(Unicode(45))
bases = dbsession.query(Base)
bases = bases.order_by(Base.owner.name)
यह काम नहीं करता सर्च कर रहे हैं .... मैं हर जगह खोज की है और प्रलेखन पढ़ा है। लेकिन मुझे नहीं लगता कि मैं अपने (स्वामी) क्वेरी को उनके 'स्वामी' रिश्ते के नाम पर कैसे क्रमबद्ध कर सकता हूं।SQLAlchemy: रिश्ते के क्षेत्र पर क्वेरी परिणाम (order_by) कैसे ऑर्डर करें?
यह हमेशा परिणाम:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'name'
यह आसान होना चाहिए ... लेकिन मैं यह नहीं दिख रहा। कंप्रेटर में भी देखा, जो तार्किक लग रहा था, लेकिन मुझे नहीं पता कि ORDER BY के लिए क्वेरी भाग उत्पन्न होता है या मुझे वापस लौटना चाहिए क्योंकि सबकुछ गतिशील रूप से उत्पन्न होता है। और एक साधारण चीज़ करने के लिए मेरे प्रत्येक 'खिलाड़ी' संबंधों के लिए एक तुलनित्र बनाना जटिल लगता है।
समझ में आता है कि। लेकिन इसका मतलब यह है कि मैं एक समय में केवल एक खिलाड़ी रिश्ते में शामिल हो सकता हूं? अधिक में शामिल होना (जो भी कारण ..) का अर्थ तोड़ना सामान है। तो अगर मैं अपडेटर से ऑर्डर करने के लिए चाहते हैं, तो मैं यह करने के लिए है:
session.query(Base).join(Base.updater).order_by(Player.name)
या 'ठेकेदार': session.query (आधार) .join (Base.occupier) .order_by (Player.name) –आप कर सकते हैं उस तालिका के उपनामों का उपयोग करके किसी भी समय एक निश्चित तालिका में शामिल हों। फिर यह एक एसक्यूएल अवधारणा है, इसलिए एसक्यूएल में समस्या को हल करने का तरीका जानना है कि आप जानते हैं कि एसक्यूएलकेमी में इसे कैसे हल किया जाए। एलिसिंग को पहली बार http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#using-aliases पर पेश किया गया है। – zzzeek
यह उत्तर किसी भी 'बेस' ऑब्जेक्ट्स को फ़िल्टर करेगा जहां 'base.ownerid' शून्य है। क्या आप जानते हैं कि संबंध मूल्यों के अनुसार दृष्टिकोण को संशोधित करने के तरीके, लेकिन उन वस्तुओं को बहिष्कृत नहीं करें जिनके संबंध में कोई मूल्य नहीं है? (शायद पिछले या पहले रिश्ते के बिना लोगों को ऑर्डर करना) – melchoir55