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, yoch....@gmail.com <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 sqlalchemy+...@googlegroups.com <javascript:> 
> > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:> 
> > <mailto:sqlal...@googlegroups.com <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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to