sqlalchemy many to many problem
Verfasst: Montag 29. Oktober 2012, 10:54
Hi,
Ich hab mal angefangen meine DB mit sqlalchemy zu laden, allerdings bin ich nun auf ein Problem gestossen bei dem ich einfach nicht weiter komme...
der Code:
das problem hab ich mit der vorletzten zeile:
wenn ich das genau so ausführe bekomme ich die meldung:
funktioniert ist aber etwas doof da so nur der genaue name geht...
das ganze als join umgebaut funktioniert auch nicht:
gibt folgenden fehler aus:
Die Foreign Keys sind doch eigentlich definiert und auch die relationships...
Ich hab mal angefangen meine DB mit sqlalchemy zu laden, allerdings bin ich nun auf ein Problem gestossen bei dem ich einfach nicht weiter komme...
der Code:
Code: Alles auswählen
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import *
engine = create_engine('sqlite:///metadata.db', echo=True)
Base = declarative_base()
books_authors_link = Table('books_authors_link', Base.metadata,
Column('book', Integer, ForeignKey('books.id'), primary_key=True),
Column('author', Integer, ForeignKey('authors.id'), primary_key=True)
)
class Authors(Base):
__tablename__ = 'authors'
id = Column(Integer, primary_key=True)
name = Column(String)
sort = Column(String)
link = Column(String)
def __init__(self, name, sort, link):
self.name = name
self.sort = link
self.sort = link
def __repr__(self):
return u"<Authors('{0},{1}{2}')>".format(self.name, self.sort, self.link)
class Books(Base):
__tablename__ = 'books'
id = Column(Integer,primary_key=True)
title = Column(String)
sort = Column(String)
path = Column(String)
has_cover = Column(Integer)
authors = relationship('Authors', secondary=books_authors_link, backref='books')
def __init__(self, title, sort, path, has_cover, authors, tags):
self.title = title
self.sort = sort
self.path = path
self.has_cover = has_cover
self.tags = tags
def __repr__(self):
return u"<Books('{0},{1}{2}{3}')>".format(self.title, self.sort, self.path, self.has_cover)
Base.metadata.create_all(engine)
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
result = session.query(Books).filter(Books.authors.like('Charlotte Link')).first()
print result.title
Code: Alles auswählen
result = session.query(Books).filter(Books.authors.like('%Link%')).first()
Code: Alles auswählen
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/sql/operators.py", line 267, in like
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/orm/attributes.py", line 123, in operate
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/sql/operators.py", line 499, in like_op
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/sql/operators.py", line 267, in like
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/sql/operators.py", line 148, in operate
NotImplementedError: <function like_op at 0x1007bb140>
Code: Alles auswählen
result = session.query(Books).filter(Books.authors.any(name='Charlotte Link')).first()
das ganze als join umgebaut funktioniert auch nicht:
Code: Alles auswählen
result = session.query(Books).join(Authors).filter(Authors.name.like('%Link%')).first()
Code: Alles auswählen
sqlalchemy.exc.InvalidRequestError: Could not find a FROM clause to join from. Tried joining to <class '__main__.Books'>, but got: Can't find any foreign key relationships between 'authors' and 'books'.