On 01/03/2016 02:43 PM, yoch.me...@gmail.com wrote:
> I've added theses lines here
> <https://bitbucket.org/zzzeek/sqlalchemy/src/c7d6c667b53d96a65e0dedcb83c098e03d4c7453/lib/sqlalchemy/ext/automap.py?at=master&fileviewer=file-view-default#automap.py-953>
> :
> 
> |
>                     ifrelationship_name inmap_config.properties:
>                         msg ="%s relationship name conflict:
> %s"%(local_cls.__name__,relationship_name)
>                         util.warn(msg)
> |
> 
> and it produces warnings as excepted :
> 
>>>> from dbmodels import *
> /usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/automap.py:961:
> SAWarning: *thermostats relationship name conflict: dispositif_ref*
>   util.warn(msg)
> 
> Whats wrong with this approach ? Is there any case that overwrite
> relationship_name in map_config.properties is correct ?

please run the test suite and observe the tests that fail with this
approach, specifically those which test the behavior of being able to
specify an explicit mapping with existing relationships.




> 
> 
> Le dimanche 3 janvier 2016 19:09:04 UTC+2, Michael Bayer a écrit :
> 
> 
> 
>     On 01/03/2016 07:00 AM, yoch....@gmail.com <javascript:> 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>
> 
>     >    
>     
> <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>
>     >     <http://device.id>'))
>     >     >     idthermometer =Column(Integer,ForeignKey('device.id
>     <http://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>>
> 
>     >
>     >     >    
>     >    
>     
> <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>
>     >     >     <http://device.id>')),
>     >     >     >    
>     Column('idthermometer',INTEGER(),ForeignKey('device.id
>     <http://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:> <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>>
>     >     >     <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>>
>     >     >     <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:> <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