hi all,

I'm working on a project with an existing SQLite database whose design
I can't change (F-Spot's photo db).  The foreign key relationships are
not labeled as such in the tables themselves, so I have to manually
specify them in my mappers.  I'm not able to get the many-to-many
relationship between the photo and tag tables working: I keep getting
the following error:

sqlalchemy.exceptions.ArgumentError: No syncrules generated for join
criterion photos.id = photo_tags.photo_id

I've messed around with various settings of cascade and foreignkey,
tried removing the backref, and tried viewonly=True.  No dice.

Many thanks in advance for any help with this!

Carl

The schema dump of the three tables is pasted below.  Here's the Python
code:

----------------------------------------------------------------
md = BoundMetaData("sqlite://./photos.db")

photo_t = Table('photos', md, autoload=True)
tag_t = Table('tags', md, autoload=True)
photo_tags_t = Table('photo_tags', md, autoload=True)


mapper(Photo, photo_t,
          properties={'tags':
                      relation(Tag, lazy=False, backref="photos",
                                  secondary=photo_tags_t,
                                  foreignkey=[photo_tags_t.c.tag_id,

photo_tags_t.c.photo_id],

primaryjoin=photo_t.c.id==photo_tags_t.c.photo_id,

secondaryjoin=photo_tags_t.c.tag_id==tag_t.c.id)})

mapper(Tag, tag_t)

session = create_session()


sqlite> .schema photos
CREATE TABLE photos (id    INTEGER PRIMARY KEY NOT NULL,
                     time INTEGER NOT NULL,
                     directory_path     STRING NOT NULL,
                     name              STRING NOT NULL,
                     description        TEXT NOT NULL,
                     default_version_id INTEGER NOT NULL
              );
----------------------------------------------------------------

Both mapped objects (Photo, Tag) are defined like:
class Photo(object):
        pass

And here are the table schema:

sqlite> .schema tags
CREATE TABLE tags (id            INTEGER PRIMARY KEY NOT NULL,
                        name          TEXT UNIQUE,
                        category_id   INTEGER,
                        is_category   BOOLEAN,
                        sort_priority INTEGER,
                        icon          TEXT   );

sqlite> .schema photo_tags
CREATE TABLE photo_tags (       photo_id      INTEGER,        tag_id
    INTEGER  );


--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to