MySQL 5.0.38 with InnoDB tables / SQL Alchemy 0.4.4 / Python 2.5.1 Hi, I'm really impressed with SQL Alchemy in general, but now that I'm trying to use it for a large-ish project, I'm getting stuck more often than I'd like.
The problem is that when I try to create a record that has foreign keys, I get: Exception: IntegrityError 'Cannot add or update a child row a foreign key constraint fails. FOREIGN KEY(`tag`) REFERENCES `tags`(`id`) I _know_ that the tag with the particular ID is already in the tags table. The first time I had this problem, I had a one-to- many between just two tables, and I would get this error if I did a session.save(user) on the user side ( the one side) and then did a session.save(log_entry) on the many side. I _really_ want to do the session .saves like this sometimes. I got it to work by doing the recommended user.logs.append(log_entry) with a relation defined in the user mapper. Now, I have a slightly more complex situation, and I can't find a way to make it work. Every time I try to tag the log entry, I get the Integrity Errors. My tables and mappings are: self.user_table = Table('user', metadata, Column('id', Integer, primary_key=True), Column('username', Unicode(60), index=True), Column('full_name', Unicode(80)), Column('email', Unicode(80), index=True), Column('pubkey', Unicode(120)), Column('password_md5', Unicode(120)), mysql_engine="innoDB" ) user_mapper = mapper(model.User, self.user_table, properties = { 'logs': relation(model.Log, backref='author'), 'tags': relation(model.Tagging, backref='tagger'), } ) self.logtype_table = Table('log_type', metadata, Column('id', Integer, primary_key=True), Column('mime_type', Unicode(20)), Column('is_python', Boolean), mysql_engine="innoDB" ) mapper(model.LogType, self.logtype_table) self.log_table = Table('log', metadata, Column('id', Integer, primary_key=True), Column('author_id', Integer, ForeignKey('user.id')), Column('created', DateTime, nullable=False), Column('type', Integer, ForeignKey('log_type.id')), Column('title', Unicode(120), nullable=False), Column('contents', UnicodeText, nullable=False), Column('parent', Integer, ForeignKey('log.id')), mysql_engine="innoDB" ) log_mapper = mapper(model.Log, self.log_table, properties = { 'tags': relation(model.Tagging) } ) self.tags_table = Table('tags', metadata, Column('id', Integer, primary_key=True), Column('name', Unicode(120), nullable=False), mysql_engine="innoDB" ) mapper(model.Tag, self.tags_table) self.taggings_table = Table('taggings', metadata, Column('id', Integer, primary_key=True), Column('tagger_id', Integer, ForeignKey('user.id'), nullable=False), Column('when', DateTime, nullable=False), Column('tag', Integer, ForeignKey('tags.id')), Column('tagged', Integer, ForeignKey('log.id')), mysql_engine="innoDB" ) mapper(model.Tagging, self.taggings_table) You can see that the last table has three Foreign Keys. I can add a user (self.jim) to the database, and also a log entry (self.log), and then I try to add a tag, and a tagging: # add a user and a log entry ....... # add a tag t = model.Tag('maplesong') self.session.save(t) self.session.flush() # successful # and with that tag, we create a tagging tg = model.Tagging(self.jim, self.log, t, datetime.today()) self.jim.tags.append(tg) self.log.tags.append(tg) self.session.flush() # Integrity Error At which point I get the Exception: IntegrityError 'Cannot add or update a child row a foreign key constraint fails. FOREIGN KEY(`tag`) REFERENCES `tags`(`id`) I do not want to add the tagging to the tag... t.taggings. add(tg) That doesn't make sense to me. So my question is: How can I avoid these inappropriate Integrity Errors? The foreign key that it's complaining about really does already exist. Thanks, -Jim --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---