Thank tou, I solved the problem with this code :
def name_for_collection_relationship(base, local_cls, referred_cls,
constraint):
disc = '_'.join(col.name for col in constraint.columns)
return referred_cls.__name__.lower() + '_' + disc + "_collection"
Le lundi 3 avril 2017 17:41:20 UTC+3, Mike Bayer a écrit :
>
> hi -
>
> this is perhaps a case automap should come up with something easier for,
> and at least have a note in the docs that refers to this specifically,
> however the general approach is to apply a naming convention to the
> relationships that will allow the conflict to resolve. you'd define
> name_for_collection_relationship, following th guidelines in
> the section:
>
> http://docs.sqlalchemy.org/en/latest/orm/extensions/automap.html?highlight=automap#handling-simple-naming-conflicts
>
>
>
> def name_for_collection_relationship(base, local_cls, referred_cls,
> constraint):
> disc = constraint.columns[0].name
> return referred_cls.__name__.lower() + disc + "_collection"
>
>
>
>
> On 04/02/2017 02:32 PM, [email protected] <javascript:> wrote:
> > Hi,
> >
> >
> > I want to use automap to generate mapping from existing database, but
> > the relation mapping fails.
> > I understand what happens, but I can't find a proper workaround to fix
> > this error.
> >
> >
> > Here a minimal code example with the minimal schema :
> >
> > CREATE TABLE `user` (
> > `id` INT UNSIGNED NOT NULL,
> > PRIMARY KEY (`id`)
> > ) ENGINE=InnoDB;
> >
> > CREATE TABLE `contact` (
> > `iduser` INT UNSIGNED NOT NULL,
> > `idcontact` INT UNSIGNED NOT NULL,
> > PRIMARY KEY (`iduser`, `idcontact`),
> > FOREIGN KEY (`iduser`) REFERENCES `user` (`id`),
> > FOREIGN KEY (`idcontact`) REFERENCES `user` (`id`)
> > ) ENGINE=InnoDB;
> >
> >
> > The minimal code is :
> >
> > Base = automap_base()
> > Base.prepare(engine, reflect=True)
> > configure_mappers()
> >
> > which fails with this backtrace :
> >
> > Traceback (most recent call last):
> > File "<stdin>", line 1, in <module>
> > File "testing.py", line 11, in <module>
> > configure_mappers()
> > File "../site-packages/sqlalchemy/orm/mapper.py", line 2866, in
> > configure_mappers
> > mapper._post_configure_properties()
> > File "../site-packages/sqlalchemy/orm/mapper.py", line 1765, in
> > _post_configure_properties
> > prop.init()
> > File "../site-packages/sqlalchemy/orm/interfaces.py", line 184, in
> init
> > self.do_init()
> > File "../site-packages/sqlalchemy/orm/relationships.py", line 1656, in
> > do_init
> > self._generate_backref()
> > File "../site-packages/sqlalchemy/orm/relationships.py", line 1837, in
> > _generate_backref
> > (backref_key, self, m))
> > sqlalchemy.exc.ArgumentError: Error creating backref 'user_collection'
> > on relationship 'user.user_collection': property of that name exists on
> > mapper 'Mapper|user|user'
> >
> >
> > In fact, I only want to have one-to-many relationship that connects a
> > user to all his contacts. But Sqlalchemy try to make a bidirectional
> > relationship (many-to-many), which fails because the relationship name
> > is the same in both cases (user_collection).
> >
> > Do you have a good solution for this problem ?
> >
> >
> > Best regards
> >
> > --
> > SQLAlchemy -
> > The Python SQL Toolkit and Object Relational Mapper
> >
> > http://www.sqlalchemy.org/
> >
> > To post example code, please provide an MCVE: Minimal, Complete, and
> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full
> > description.
> > ---
> > You received this message because you are subscribed to the Google
> > Groups "sqlalchemy" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> > an email to [email protected] <javascript:>
> > <mailto:[email protected] <javascript:>>.
> > To post to this group, send email to [email protected]
> <javascript:>
> > <mailto:[email protected] <javascript:>>.
> > Visit this group at https://groups.google.com/group/sqlalchemy.
> > For more options, visit https://groups.google.com/d/optout.
>
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.