[Sqlalchemy-tickets] Issue #3789: allow StrSQLCompiler to generate columns w/o names (zzzeek/sqlalc
Brought to you by:
zzzeek
From: Michael B. <iss...@bi...> - 2016-09-02 15:44:14
|
New issue 3789: allow StrSQLCompiler to generate columns w/o names https://bitbucket.org/zzzeek/sqlalchemy/issues/3789/allow-strsqlcompiler-to-generate-columns-w Michael Bayer: e.g. for this: ``` #!python from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class B(Base): __tablename__ = 'b' id = Column(Integer, primary_key=True) a_id = Column(Integer) class AbstractThing(Base): __abstract__ = True id = Column(Integer, primary_key=True) class A(AbstractThing): __tablename__ = 'a' bs = relationship("B", primaryjoin=B.a_id == AbstractThing.id) configure_mappers() ``` patch: ``` #!diff diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 85d5ff6..38013fb 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -660,12 +660,15 @@ class SQLCompiler(Compiled): return label.element._compiler_dispatch( self, within_columns_clause=False, **kw) + def _fallback_column_name(self, column): + raise exc.CompileError("Cannot compile Column object until " + "its 'name' is assigned.") + def visit_column(self, column, add_to_result_map=None, include_table=True, **kwargs): name = orig_name = column.name if name is None: - raise exc.CompileError("Cannot compile Column object until " - "its 'name' is assigned.") + name = self._fallback_column_name(column) is_literal = column.is_literal if not is_literal and isinstance(name, elements._truncated_label): @@ -2203,6 +2206,9 @@ class StrSQLCompiler(SQLCompiler): """ + def _fallback_column_name(self, column): + return "<name unknown>" + def visit_getitem_binary(self, binary, operator, **kw): return "%s[%s]" % ( self.process(binary.left, **kw), ``` |