Hi,
I got an idea today and thought that maybe SQLAlchemy could support that
(copy at http://ideone.com/t42G4 ):
======================================================
# Fails with Python-2.7.0 and SQLAlchemy-0.7.1
import sqlalchemy
import sqlalchemy.ext.declarative
Base = sqlalchemy.ext.declarative.declarative_base(mapper =
sqlalchemy.orm.mapper)
engine =
sqlalchemy.create_engine('postgres://tefbusiness_test:None@/tefbusiness_test_2',
echo = False)
session = sqlalchemy.orm.scoped_session(
sqlalchemy.orm.sessionmaker(
bind = engine,
autocommit = False,
)
)
Base.metadata.bind = engine
class Person(Base):
Id = sqlalchemy.Column( sqlalchemy.types.Integer, primary_key =
True, autoincrement = True)
__tablename__ = 'person'
firstName = sqlalchemy.Column( sqlalchemy.types.String(128),
nullable = False)
lastName = sqlalchemy.Column( sqlalchemy.types.String(128), nullable
= False)
name = sqlalchemy.orm.column_property(
sqlalchemy.func.lower(firstName + ' ' + lastName)
)
__table_args__ = (sqlalchemy.schema.Index('foo', name.columns[0]),
{})
"""
Traceback (most recent call last):
File "column_property_2.py", line 20, in <module>
class Person(Base):
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/ext/declarative.py",
line 1128, in __init__
_as_declarative(cls, classname, cls.__dict__)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/ext/declarative.py",
line 1027, in _as_declarative
**table_kw)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/schema.py",
line 265, in __new__
table._init(name, metadata, *args, **kw)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/schema.py",
line 340, in _init
self._init_items(*args)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/schema.py",
line 64, in _init_items
item._set_parent_with_dispatch(self)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/events.py",
line 227, in _set_parent_with_dispatch
self._set_parent(parent)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/schema.py",
line 2112, in _set_parent
ColumnCollectionMixin._set_parent(self, table)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/schema.py",
line 1808, in _set_parent
self.columns.add(col)
File
"/home/filip/gitsrc/tefobjects/lib/python2.7/site-packages/SQLAlchemy-0.7.1-py2.7.egg/sqlalchemy/sql/expression.py",
line 2115, in add
self[column.key] = column
AttributeError: 'Function' object has no attribute 'key'
"""
======================================================
If Index() could accept clauses as columns, then maybe we could get
something like:
name = sqlalchemy.orm.column_property(
sqlalchemy.func.lower(firstName + ' ' + lastName),
index = True
)
Most of the needed pieces are already in place.
PostgreSQL can do stuff like this:
======================================================
test=# CREATE INDEX ix_foo ON "teryt_Street" (lower(prename || ' ' ||
postname));
CREATE INDEX
test=#
======================================================
What do you think :)?
regards,
Filip Zyzniewski
Tefnet
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.