Is it possible to create a relationship via the table name as the "foreign
key"? I tried playing around with the foreign and remote options and tried
utilizing what's described here:
https://docs.sqlalchemy.org/en/13/orm/join_conditions.html#non-relational-comparisons-materialized-path
but
I couldn't get it to work for my case.
I have a table that has entity types and a table_name column, e.g.
class EntityType(Base):
__tablename__ = "entity_type"
id = Column(UUID, primary_key=True, server_default=FetchedValue())
table_name = Column(String, nullable=False)
prefix = Column(Text, unique=True, nullable=False)
alt_prefix = Column(Text)
ui_label = Column(Text, unique=True, nullable=False)
entry_key = Column(Text, unique=True, nullable=False)
config_entity_column_ui_visibility =
relationship("ConfigEntityColumnUiVisibility")
def __repr__(self):
return (
f"<EntityType(id={self.id} table_name={self.table_name}
prefix={self.prefix} ui_label={self.ui_label} "
f"entry_key={self.entry_key}>"
)
I want to create a relationship to this table from other tables via their table
name rather than a column on the table. Is this possible?
e.g.
class GenericEntityTypeMixin:
@declared_attr.cascading
def prefix(cls) -> ColumnProperty:
from webapp.database.orm.models import EntityType
return column_property(
select([EntityType.prefix])
.where(EntityType.table_name == cls.__tablename__)
.as_scalar(),
info={"key": "prefix"},
)
@hybrid_property
def qualified_id(self):
return f"{self.prefix}-{self.visible_id}"
# @declared_attr
# def entity_type(cls) -> RelationshipProperty:
# how do we create relationship without using a column object on the
foreign side?
@declared_attr
def entity_type_entry_key(cls):
return association_proxy("entity_type", "entry_key")
--
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 view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/d54d0af1-7e8e-44f1-8398-989b09b3ea8e%40googlegroups.com.