[Sqlalchemy-tickets] [sqlalchemy] #2828: column_property hides original column
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2013-09-18 04:58:49
|
#2828: column_property hides original column
-----------------------------+-----------------------------------------
Reporter: jerryji | Owner: zzzeek
Type: defect | Status: new
Priority: medium | Milestone:
Component: orm | Severity: no triage selected yet
Keywords: column_property | Progress State: awaiting triage
-----------------------------+-----------------------------------------
column_property hides original column from __mapper__ when used with no
change.
Results from running the attached column_property.py, tested against
sqlalchemy git clone just now --
{{{
(sqlalchemy) C:\sqlalchemy>ipython
Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)]
In [1]: import sqlalchemy
In [2]: sqlalchemy.__version__
Out[2]: '0.9.0'
In [3]: %run column_property.py
['name_alias', 'id']
['name_alias', 'id', 'name']
}}}
column_property.py (in case attachment fails), maybe not the right way to
create an aliasing column, but still looks like a bug to me --
{{{
from sqlalchemy import (
create_engine,
Column,
Text,
Integer,
)
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
column_property,
)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class NameMissing(Base):
__tablename__ = 'name_missing'
id = Column(Integer, primary_key=True)
name = Column(Text)
name_alias = column_property(name)
def __init__(self, id, name):
self.id = id
self.name = name
class NameOK(Base):
__tablename__ = 'name_ok'
id = Column(Integer, primary_key=True)
name = Column(Text)
name_alias = column_property(name+'')
def __init__(self, id, name):
self.id = id
self.name = name
engine = create_engine('sqlite://')
Base.metadata.create_all(engine)
dbsession = scoped_session(sessionmaker(bind=engine))
new_name_missing = NameMissing(1, 'foobar')
dbsession.add(new_name_missing)
new_name_ok = NameOK(1, 'foobar')
dbsession.add(new_name_ok)
dbsession.commit()
name_missing = dbsession.query(NameMissing).first()
print name_missing.__mapper__.columns.keys()
name_ok = dbsession.query(NameOK).first()
print name_ok.__mapper__.columns.keys()
}}}
Jerry
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2828>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|