this error means that your Server class has a column attribute which you would 
access as Server.updatedDate.   Your ServerUtilization subclass has another 
column attribute which you would also access as ServerUtilization.updatedDate.

the problem arises in that ServerUtilization refers to the combination of two 
rows, one inthe "Server" table and the other in "ServerUtilization" .

If you had rows in these two tables where updatedDate were different, the 
ServerUtilization entity would be unable to refer to these two separate values 
as there is no mapped attribute that separates them.

This means that if you were to say,   some_server_utilization.updatedDate = 
<somedate> , that date value would be *copied* to both the serverutilization 
and server tables, even though you have not given instructions to the ORM that 
these two columns should always be identical.

the ORM wants explicit instructions on how to handle these two different 
columns.  the two examples given in the FAQ entry can apply directly to your 
model as either separating them:

class ServerUtilization(Server):
   # ...

   utilization_updatedAt = Column("updatedAt", ...)


or combining them:

class ServerUtilization(Server):
   # ...

   updatedAt = column_property(Column("updatedAt", ...), Server.updatedAt)





On Tue, Dec 22, 2020, at 12:46 PM, Larry Martell wrote:
> I have these 2 models:
> 
> class Server(Base):
>     __tablename__ = 'Server'
> 
>     serverName = Column(String(50, 'SQL_Latin1_General_CP1_CI_AS'),
> primary_key=True)
>     serverTypeEnumID = Column(Integer)
>     serverComponentEnumID = Column(ForeignKey('Enumeration.enumID'))
>     serverEnvironmentEnumID = Column(ForeignKey('Enumeration.enumID'),
> nullable=False)
>     serverLifecycleEnumID = Column(ForeignKey('Enumeration.enumID'))
>     processorType = Column(String(50, 'SQL_Latin1_General_CP1_CI_AS'))
>     processorSpeedInGhz = Column(DECIMAL(9, 2))
>     physicalProcessorCount = Column(Integer)
>     corePerProcessorCount = Column(Integer)
>     coreCount = Column(Integer)
>     logicalProcessorCount = Column(Integer)
>     memoryInGB = Column(DECIMAL(19, 2))
>     serverIsVirtual = Column(String(1, 'SQL_Latin1_General_CP1_CI_AS'))
>     serverEndOfLifeDate = Column(DateTime)
>     locationCode = Column(ForeignKey('Location.locationCode'))
>     serverOSProductID = Column(ForeignKey('ProductVersion.productVersionID'))
>     updatedDate = Column(DateTime, nullable=False,
> server_default=text("(getdate())"))
> 
>     Location = relationship('Location')
>     Enumeration = relationship('Enumeration',
> primaryjoin='Server.serverComponentEnumID == Enumeration.enumID')
>     Enumeration1 = relationship('Enumeration',
> primaryjoin='Server.serverEnvironmentEnumID == Enumeration.enumID')
>     Enumeration2 = relationship('Enumeration',
> primaryjoin='Server.serverLifecycleEnumID == Enumeration.enumID')
>     ProductVersion = relationship('ProductVersion')
>     Storage = relationship('Storage', secondary=lambda: 
> ServerStorage.__table__)
> 
> class ServerUtilization(Server):
>     __tablename__ = 'ServerUtilization'
> 
>     serverName = Column(ForeignKey('Server.serverName'), primary_key=True)
>     utilizationProfile = Column(String(50,
> 'SQL_Latin1_General_CP1_CI_AS'), nullable=False)
>     utilizationCpuPercent = Column(DECIMAL(9, 2))
>     utilizationMemoryPercent = Column(DECIMAL(9, 2))
>     utilizationStoragePercent = Column(DECIMAL(9, 2))
>     updatedDate = Column(DateTime, nullable=False,
> server_default=text("(getdate())"))
> 
> And I get this message:
> 
> /Users/lmartell/Data-Exchange-Consolidation/scripts/venv/lib/python3.8/site-packages/sqlalchemy/orm/mapper.py:1899:
> SAWarning: Implicitly combining column Server.updatedDate with column
> ServerUtilization.updatedDate under attribute 'updatedDate'.  Please
> configure one or more attributes for these same-named columns
> explicitly.
> 
> I read this: 
> https://docs.sqlalchemy.org/en/13/faq/ormconfiguration.html#i-m-getting-a-warning-or-error-about-implicitly-combining-column-x-under-attribute-y
> 
> But it's not clear to me why I am getting the message in this case,
> nor how to fix it.
> 
> -- 
> 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/CACwCsY7W0uHskGdoMconkCVJSy8sw21U%3DkSfE%2BkYU0mN8zKDsw%40mail.gmail.com.
> 

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/c4cb8116-3bea-4d59-92d2-9fdfe1baa291%40www.fastmail.com.

Reply via email to