Ich arbeite gerade das SqlAlchemy-Tutorial (0.5.5) durch und hab ein Problem mit einem Beispiel zu 'relation', es geht halt nicht so wie es da steht. Dabei funktionert die Relation vom Parent zum Child, aber nicht andersrum.
So sieht das Beispiel aus, wenn die markierte Zeile auskommentiert ist gehts, wenn nicht kommt die unten stehende Fehlermeldung.Vielleicht kann mir wer sagen, was da falsch ist.
Code: Alles auswählen
from sqlalchemy import Column, Integer, String, MetaData, ForeignKey, create_engine
from sqlalchemy.orm import relation, backref, sessionmaker, clear_mappers
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
email_address = Column(String, nullable=False)
user_id = Column(Integer, ForeignKey('users.id'))
>>> user = relation('User', backref=backref('addresses', order_by=id)) <<<
def __init__(self, email_address):
self.email_address = email_address
def __repr__(self):
return "<Address('%s')>" % self.email_address
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
addresses = relation(Address, order_by=Address.id, backref="user")
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
def main():
con = 'sqlite://'
engine = create_engine(con, echo=True)
Session = sessionmaker(bind=engine)
metadata = Base.metadata
metadata.create_all(engine)
session = Session()
if __name__ == '__main__':
main()
unhandled ArgumentError: Error creating backref 'user' on relation 'User.addresses': property of that name exists on mapper 'Mapper|Address|addresses'
Danke im Voraus!
Uwe