Aynı tabloya sqlalchemy'de katılmaya çalışıyorum.Aynı tabloya nasıl erişebilirsiniz sqlalchemy
#!/usr/bin/env python
import sqlalchemy as sa
from sqlalchemy import create_engine
from sqlalchemy.orm import mapper, sessionmaker, aliased
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = sa.MetaData()
device_table = sa.Table("device", metadata,
sa.Column("device_id", sa.Integer, primary_key=True),
sa.Column("name", sa.String(255), nullable=False),
sa.Column("parent_device_id", sa.Integer, sa.ForeignKey('device.device_id')),
)
class Device(object):
device_id = None
def __init__(self, name, parent_device_id=None):
self.name = name
self.parent_device_id = parent_device_id
def __repr__(self):
return "<Device(%s, '%s', %s)>" % (self.device_id,
self.name,
self.parent_device_id)
mapper(Device, device_table)
metadata.create_all(engine)
db_session = sessionmaker(bind=engine)()
parent = Device('parent')
db_session.add(parent)
db_session.commit()
child = Device('child', parent.device_id)
db_session.add(child)
db_session.commit()
ParentDevice = aliased(Device, name='parent_device')
q = db_session.query(Device, ParentDevice)\
.outerjoin(ParentDevice,
Device.parent_device_id==ParentDevice.device_id)
print list(q)
Bu bana bu hata veriyor:
ArgumentError: Can't determine join between 'device' and 'parent_device'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly.
Ama katılmak için onclause
belirterek ediyorum bu ne denedim bir, minimal bir versiyonudur. Bunu nasıl yapmalıyım?
Yukarıdaki örnek için bunu işe alamadım, ancak bu dokümana gösterici için teşekkürler. Benim farkında değil ki, benim app diğer bölümlerinde benim için yararlı olacak olan sqlalchemy bazı bölümleri beni tanıttı. –
Gelecekte başvurmak için ... [bu bağlantı] (http://www.sqlalchemy.org/docs/orm/relationships.html#adjacency-list-relationships) daha günceldir ve bildirici bir örneğe sahiptir. – Russ