On 01/03/2016 07:00 AM, yoch.me...@gmail.com wrote:
> OK, thanks you.
> 
> I think it's a good idea to issue a warning in such cases.

unfortunately this is a difficult situation to detect since it is a
valid use case to present a mapped class that already has relationships
present on it, which will not be overridden.   Additional bookkeeping
would need to be added to the automap process to track all those class/
name combinations that were locally added without coming up with false
positives.



> 
> Best regards
> 
> Le samedi 2 janvier 2016 19:18:12 UTC+2, Michael Bayer a écrit :
> 
> 
> 
>     On 01/02/2016 11:38 AM, yoch....@gmail.com <javascript:> wrote:
>     > Thank you.
>     >
>     > I hesitate between using this way, or explicitly specify the
>     relationship
>     > (is this a good idea? In my test I found 3 relations after
>     prepare()) :
> 
>     it's fine to do that.  Automap is still building its own
>     relationship as
>     well which is why you end up with three of them.  The
>     generate_relationship hook can be used to return None in those cases
>     where you don't want automap to generate a relationship:
>     
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#sqlalchemy.ext.automap.generate_relationship
>     
> <http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#sqlalchemy.ext.automap.generate_relationship>
> 
> 
> 
>     >
>     > |
>     > classThermostat(Base):
>     >     __tablename__ ='thermostats'
>     >     idbuiltin =Column(Integer,ForeignKey('device.id
>     <http://device.id>'))
>     >     idthermometer =Column(Integer,ForeignKey('device.id
>     <http://device.id>'))
>     >     thermometer =relationship(Dispositif,foreign_keys=idthermometer)
>     >     builtin =relationship(Dispositif,foreign_keys=idbuiltin)
>     > |
>     >
>     >
>     > Another interesting point is how to detect this error to warn. I
>     tried
>     > to use name_for_scalar_relationship() for that, but I don't kow
>     how to
>     > get the relationships mapper.
>     >
>     > Best regards
>     >
>     > Le vendredi 1 janvier 2016 18:27:14 UTC+2, Michael Bayer a écrit :
>     >
>     >     you need to use the name generation functions
>     >     name_for_scalar_relationship() and/or
>     >     name_for_collection_relationship()
>     >     to produce different names in each case.  The "constraint"
>     parameter
>     >     passed as we see in
>     >    
>     
> http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts
>     
> <http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts>
> 
>     >    
>     
> <http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts
>     
> <http://docs.sqlalchemy.org/en/rel_1_0/orm/extensions/automap.html#handling-simple-naming-conflicts>>
> 
>     >
>     >     is a ForeignKeyConstraint object, you can look inside of
>     >     constraint.column_keys to see if it is ['idbuiltin'] or
>     >     ['idthermometer'] and use that to generate a name.
>     >
>     >
>     >
>     >     On 01/01/2016 04:16 AM, yoch....@gmail.com <javascript:> wrote:
>     >     > Hi all,
>     >     >
>     >     > I use automap with database reflection to import schema with
>     >     sqlalchemy.
>     >     >
>     >     > In case I have two relationships on same foreign key in some
>     >     table, only
>     >     > one relationship is created by prepare(), the second one seems
>     >     overwrited.
>     >     >
>     >     > My table looks like :
>     >     >
>     >     > |
>     >     > Table('thermostat',
>     >     >     Base.metadata,
>     >     >     Column('id',INTEGER(),primary_key=True,nullable=False),
>     >     >     Column('idbuiltin',INTEGER(),ForeignKey('device.id
>     <http://device.id>
>     >     <http://device.id>')),
>     >     >     Column('idthermometer',INTEGER(),ForeignKey('device.id
>     <http://device.id>
>     >     <http://device.id>')))
>     >     > |
>     >     >
>     >     > How to control relationship creation to produce two distinct
>     >     relationships ?
>     >     >
>     >     > Thank you and Happy New Year !
>     >     >
>     >     > --
>     >     > 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:> <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
>     <https://groups.google.com/group/sqlalchemy>
>     >     <https://groups.google.com/group/sqlalchemy
>     <https://groups.google.com/group/sqlalchemy>>.
>     >     > For more options, visit https://groups.google.com/d/optout
>     <https://groups.google.com/d/optout>
>     >     <https://groups.google.com/d/optout
>     <https://groups.google.com/d/optout>>.
>     >
>     > --
>     > 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
>     <https://groups.google.com/group/sqlalchemy>.
>     > For more options, visit https://groups.google.com/d/optout
>     <https://groups.google.com/d/optout>.
> 
> -- 
> 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
> <mailto:sqlalchemy+unsubscr...@googlegroups.com>.
> To post to this group, send email to sqlalchemy@googlegroups.com
> <mailto:sqlalchemy@googlegroups.com>.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
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