struct T_AssetTransitCircuit {
1. asset_id
2. vendor_id
3. vendor
}
struct T_AssetTransportCircuit {
1. asset_id
2. vendor_id
3. vendor
}
struct T_Vendor {
1: i32 id,
2: optional string name,
3: optional string sf_id,
4: optional string transit_as_id,
5: optional i64 created_by,
6: optional i64 created_at,
7: optional i64 updated_by,
8: optional i64 updated_at,
9: optional bool active
}
struct T_Circuit {
1. asset_id
2. vendor_id
3. vendor
}
class Vendor:
__tablename__ = 'vendor'
id = Column(DBT.UNSIGNED_INT10, primary_key=True, autoincrement=True)
name = Column(DBT.STRING)
sf_id = Column(DBT.STRING, unique=True, nullable=False)
transit_as_id = Column(DBT.STRING)
created_by = Column(mysql.BIGINT(20))
created_at = Column(NumericDatetime, default=current_timestamp)
updated_by = Column(mysql.BIGINT(20))
updated_at = Column(
NumericDatetime,
nullable=False,
default=current_timestamp,
onupdate=current_timestamp)
active = Column(DBT.UNSIGNED_SMALLINT, nullable=False, default=1)
vendor_mapper = mapper(
T_Vendor,
Vendor.__table__,
)
class AssetTransitCircuit:
__tablename__ = 'asset_transit_circuit'
id = Column(
DBT.UNSIGNED_INT_ID,
ForeignKey("fb_asset.id"),
primary_key=True,
)
vendor_id = Column(DBT.UNSIGNED_INT10, ForeignKey("vendor.id"))
class AssetTransportCircuit:
__table__ = 'asset_transport_circuit'
id = Column(
DBT.UNSIGNED_INT_ID,
ForeignKey("fb_asset.id"),
primary_key=True,
)
vendor_id = Column(DBT.UNSIGNED_INT10, ForeignKey("vendor.id"))
c1_select = select([
AssetTransportCircuit.id,
AssetTransportCircuit.vendor_id,
])
c2_select = select([
AssetTransitCircuit.id,
AssetTransitCircuit.vendor_id,
])
c1_mapper = mapper(
TCircuit,
c1_select,
primary_key=[c1_select.c.id],
properties={
'asset_id': c1_select.c.id,
'vendor_id': c1_select.c.vendor_id,
'vendor': relationship(
vendor_mapper,
foreign_keys=[c1_select.c.vendor_id],
),
)
c2_mapper = mapper(
TCircuit,
c2_select,
primary_key=[c2_select.c.id],
properties={
'asset_id': c2_select.c.id,
'vendor_id': c2_select.c.vendor_id,
'vendor': relationship(
vendor_mapper,
foreign_keys=[c2_select.c.vendor_id],
),
)
q1
=
session.query(c1.mapper._class).options(joinedload('vendor')).options(load_load('id'))
q2
=
session.query(c2.mapper._class).options(joinedload('vendor')).options(load_load('id'))
q1.union(q2).all()
On Wednesday, October 26, 2016 at 3:42:51 AM UTC-7, Mike Bayer wrote:
>
> In a case like this I don't know what the problem is without being able
> to run an example. The guidelines at
> http://stackoverflow.com/help/mcve would make this easiest. Can we see
> complete mappings / table information (only what's needed to reproduce
> the problem) as well as how you are creating these Query and/or select()
> objects (it seems these are select() )?
>
> Also need version of SQLAlchemy in use.
>
> thanks!
>
>
>
>
> On 10/25/2016 04:48 PM, Alfred Soeng wrote:
> > When I union 2 queries, it seems combine the same relationship together
> > and cause the alias problem
> > In the code, it generated 2 queries like:
> > q1:
> >
> > SELECT anon_1.id AS anon_1_id, anon_1.vendor_id AS anon_1_vendor_id,
> > vendor_1.id AS vendor_1_id, vendor_1.name AS vendor_1_name,
> > vendor_1.sf_id AS vendor_1_sf_id, vendor_1.transit_as_id AS
> > vendor_1_transit_as_id, vendor_1.created_by AS vendor_1_created_by,
> > vendor_1.created_at AS vendor_1_created_at, vendor_1.updated_by AS
> > vendor_1_updated_by, vendor_1.updated_at AS vendor_1_updated_at,
> > vendor_1.active AS vendor_1_active
> >
> > FROM (SELECT asset_transport_circuit.id AS id,
> > asset_transport_circuit.vendor_id AS vendor_id
> >
> > FROM asset_transport_circuit) AS anon_1 LEFT OUTER JOIN vendor AS
> > vendor_1 ON vendor_1.id = anon_1.vendor_id
> >
> >
> > q2:
> >
> > SELECT anon_1.id AS anon_1_id, anon_1.vendor_id AS anon_1_vendor_id,
> > vendor_1.id AS vendor_1_id, vendor_1.name AS vendor_1_name,
> > vendor_1.sf_id AS vendor_1_sf_id, vendor_1.transit_as_id AS
> > vendor_1_transit_as_id, vendor_1.created_by AS vendor_1_created_by,
> > vendor_1.created_at AS vendor_1_created_at, vendor_1.updated_by AS
> > vendor_1_updated_by, vendor_1.updated_at AS vendor_1_updated_at,
> > vendor_1.active AS vendor_1_active
> >
> > FROM (SELECT asset_transit_circuit.id AS id,
> > asset_transit_circuit.vendor_id AS vendor_id
> >
> > FROM asset_transit_circuit) AS anon_1 LEFT OUTER JOIN vendor AS vendor_1
> > ON vendor_1.id = anon_1.vendor_id
> >
> >
> > But when I called the q1.union(q2), it said an column issue because the
> > union merge the same 'LEFT OUTER JOIN vendor AS vendor_1 ON vendor_1.id
> > = anon_1.vendor_id' together and cause a alias problem:
> >
> >
> > q1.union(q2):
> >
> > (1054, "Unknown column '`anon_2`.`vendor_id`' in 'on clause'") [SQL:
> > 'SELECT anon_1.anon_2_id AS anon_1_anon_2_id, anon_2.vendor_id AS
> > anon_2_vendor_id, vendor_1.id AS vendor_1_id, vendor_1.name AS
> > vendor_1_name, vendor_1.sf_id AS vendor_1_sf_id, vendor_1.transit_as_id
> > AS vendor_1_transit_as_id, vendor_1.created_by AS vendor_1_created_by,
> > vendor_1.created_at AS vendor_1_created_at, vendor_1.updated_by AS
> > vendor_1_updated_by, vendor_1.updated_at AS vendor_1_updated_at,
> > vendor_1.active AS vendor_1_active \nFROM (SELECT
> > asset_transport_circuit.id AS id, asset_transport_circuit.vendor_id AS
> > vendor_id \nFROM asset_transport_circuit) AS anon_2, (SELECT /*
> > <string>:2 union --/--/--/-- */ anon_2.id AS anon_2_id \nFROM (SELECT
> > asset_transport_circuit.id AS id, asset_transport_circuit.vendor_id AS
> > vendor_id \nFROM asset_transport_circuit) AS anon_2 \nWHERE anon_2.id
> IN
> > (%s, %s, %s) UNION SELECT anon_3.id AS anon_3_id \nFROM (SELECT
> > asset_transit_circuit.id AS id, asset_transit_circuit.vendor_id AS
> > vendor_id \nFROM asset_transit_circuit) AS anon_3 \) AS anon_1 LEFT
> > OUTER JOIN vendor AS vendor_1 ON vendor_1.id = anon_2.vendor_id'
> >
> >
> > The 2 mappers are the same but different name: like below:
> >
> >
> > dc_select =
> > select([AssetTransportCircuit.id, AssetTransportCircuit.vendor_id,])
> >
> >
> > class TT_Circuit(object):
> >
> > def __init__(self, asset_id, vendor_id, vendor):
> >
> > self.asset_id = asset_id
> >
> > self.vendor_id = vendor_id
> >
> > self.vendor = vendor
> >
> >
> > circuit_mapper = mapper(
> >
> > TT_Circuit,
> >
> > dc_select,
> >
> > primary_key=[dc_select.c.id],
> >
> > properties={
> >
> > 'asset_id': dc_select.c.id,
> >
> > 'vendor_id': dc_select.c.vendor_id.label('vendor_id'),
> >
> > 'vendor': relationship(
> >
> > vendor_mapper,
> >
> > primaryjoin=and_(
> >
> > dc_select.c.vendor_id == foreign(Vendor.id),
> >
> > foreign(Vendor.active),
> >
> > ),
> >
> > uselist=False,
> >
> > viewonly=True,
> >
> > ),
> >
> > }
> >
> > )
> >
> >
> > Is there a way to resolve the problem?
> >
> > --
> > 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.