On 04/05/2017 07:42 PM, davor wrote:
It seems that
besides name_for_scalar_relationship also generate_relationship has to
be adjusted since the backref name will also not be unique.
name_for_collection_relationship is usually what you need for
bi-directional many-to-many
Are here any options to make the name more unique?
On Wednesday, 6 January 2016 11:43:54 UTC+1, [email protected] wrote:
For now, I don't have a sufficiently comprehensive view of the
automap process and its effects to make a pull-request.
Maybe one day I'll take time to learn more about that, and to
understand the corresponding tests.
Thank you
Le lundi 4 janvier 2016 05:19:17 UTC+2, Michael Bayer a écrit :
there's actually two if you put your check everywhere it would
be needed
(I already tried when you first suggested that it warn, which is
the
origin of my response that this is not a one liner).
the warning here is doable it just needs more state to be
tracked as
automap runs. if you want to work on this I can accept a pull
request
if you can add some tests.
On 01/03/2016 07:24 PM, [email protected] wrote:
> Okay, I have one test failed for automap :
>
> ~/sqlalchemy $ ./sqla_nose.py test.ext.test_automap
> .....E......
>
======================================================================
> ERROR:
>
test.ext.test_automap.AutomapTest.test_relationship_explicit_override_m2o
>
----------------------------------------------------------------------
> Traceback (most recent call last):
> File "/usr/lib/python2.7/dist-packages/nose/case.py", line
197, in runTest
> self.test(*self.arg)
> File "/home/pi/sqlalchemy/test/ext/test_automap.py", line
55, in
> test_relationship_explicit_override_m2o
> Base.prepare()
> File "/home/pi/sqlalchemy/lib/sqlalchemy/ext/automap.py",
line 777, in
> prepare
> generate_relationship)
> File "/home/pi/sqlalchemy/lib/sqlalchemy/ext/automap.py",
line 956, in
> _relationships_for_fks
> util.warn(msg)
> File
"/home/pi/sqlalchemy/lib/sqlalchemy/util/langhelpers.py", line
> 1292, in warn
> warnings.warn(msg, exc.SAWarning, stacklevel=2)
> SAWarning: Address relationship name conflict: users
>
>
----------------------------------------------------------------------
> Ran 12 tests in 27.450s
>
> FAILED (errors=1)
>
> Le lundi 4 janvier 2016 01:06:42 UTC+2, Michael Bayer a écrit :
>
>
>
> On 01/03/2016 02:43 PM, [email protected] <javascript:>
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
<https://bitbucket.org/zzzeek/sqlalchemy/src/c7d6c667b53d96a65e0dedcb83c098e03d4c7453/lib/sqlalchemy/ext/automap.py?at=master&fileviewer=file-view-default#automap.py-953>
>
<https://bitbucket.org/zzzeek/sqlalchemy/src/c7d6c667b53d96a65e0dedcb83c098e03d4c7453/lib/sqlalchemy/ext/automap.py?at=master&fileviewer=file-view-default#automap.py-953
<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, [email protected]
<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, [email protected]
<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>>
>
> >
>
<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>>>
>
> >
> > >
> >
>
<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>>
>
> >
>
<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>
> > <http://device.id>
> > > <http://device.id>'))
> > > > idthermometer
> =Column(Integer,ForeignKey('device.id <http://device.id>
<http://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>>>
>
> >
> > >
> >
>
<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>>>>
>
> >
> > >
> > > >
> > >
> >
>
<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>>>
>
> >
> > >
> >
>
<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, [email protected]
> <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>
> > > <http://device.id>
> > > > <http://device.id>')),
> > > > >
> >
Column('idthermometer',INTEGER(),ForeignKey('device.id
<http://device.id>
> <http://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
[email protected]
> <javascript:>
> > > > >
<mailto:[email protected]
> <javascript:>
> > <javascript:>
> > > <javascript:> <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
<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
<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
<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
<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>>>
> > > <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>>>>
> > > > <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>>>
> > > <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 [email protected]
<javascript:>
> > > > <mailto:[email protected]
> <javascript:>
> > <javascript:> <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
<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
<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>>>
> > > <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 [email protected]
<javascript:>
> > > <mailto:[email protected]
> <javascript:> <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
<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 [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
<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 [email protected]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> 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>.
--
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]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
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.