Index() is not a Table argument.As in DDL where CREATE INDEX is
its own declaration outside of CREATE TABLE, Index() is setup
independently:
class MyClass(Base):
... columns
Index(my_index, MyClass.__table__.c.foo)
or
Index(my_index, MyClass.foo)
On Aug 21, 2009, at 5:25 AM, rajasekhar911 wrote:
i tried
class MyClass:
__tablename__ = 'my_table'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
type = Column(String, nullable=False)
__table_args__ = (
Index('ix_name_type', name , type ,unique=True)
)
it errors out
__table_args__ = (
File /usr/lib/python2.4/site-packages/SQLAlchemy-0.5.5-py2.4.egg/
sqlalchemy/schema.py, line 1461, in __init__
self._init_items(*columns)
File /usr/lib/python2.4/site-packages/SQLAlchemy-0.5.5-py2.4.egg/
sqlalchemy/schema.py, line 1465, in _init_items
self.append_column(_to_schema_column(column))
File /usr/lib/python2.4/site-packages/SQLAlchemy-0.5.5-py2.4.egg/
sqlalchemy/schema.py, line 1476, in append_column
self._set_parent(column.table)
File /usr/lib/python2.4/site-packages/SQLAlchemy-0.5.5-py2.4.egg/
sqlalchemy/schema.py, line 1469, in _set_parent
self.metadata = table.metadata
AttributeError: 'NoneType' object has no attribute 'metadata'
thanks
On Aug 21, 2:22 pm, rajasekhar911 rajasekhar...@gmail.com wrote:
hi thanks for the reply..
but one doubt
how will i access the MyClass inside MyClass
i tried
ndex('ix_name_type',
MyClass.__table__.c.name,MyClass.__table__.c.type, unique=True)
it is giving the error
NameError: name 'MyClass' is not defined
thanks
On Aug 21, 2:04 pm, King Simon-NFHD78 simon.k...@motorola.com
wrote:
-Original Message-
From: sqlalchemy@googlegroups.com
[mailto:sqlalch...@googlegroups.com] On Behalf Of rajasekhar911
Sent: 21 August 2009 07:30
To: sqlalchemy
Subject: [sqlalchemy] Re: index in SA
i want to add a composite index to the class inherited from
declarative_base
I tried this,
class MyClass:
__tablename__ = 'my_table'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
type = Column(String, nullable=False)
__table_args__ = (
Index('ix_name_type','name','type',unique=True)
)
gave me an error,
File /m2svn/trunk/src/model/MyClass.py, line 32, in MyClass
__table_args__ = (
File /usr/lib/python2.4/site-packages/SQLAlchemy-0.5.5-
py2.4.egg/
sqlalchemy/schema.py, line 1461, in __init__
self._init_items(*columns)
File /usr/lib/python2.4/site-packages/SQLAlchemy-0.5.5-
py2.4.egg/
sqlalchemy/schema.py, line 1465, in _init_items
self.append_column(_to_schema_column(column))
File /usr/lib/python2.4/site-packages/SQLAlchemy-0.5.5-
py2.4.egg/
sqlalchemy/schema.py, line 2145, in _to_schema_column
raise exc.ArgumentError(schema.Column object expected)
sqlalchemy.exc.ArgumentError: schema.Column object expected
I'm not sure if this is the root cause of your error, but
__table_args__
must either be a dictionary or a tuple where the last element is a
dictionary (according
tohttp://www.sqlalchemy.org/docs/05/reference/ext/declarative.html#table-c
onfiguration)
Also, I think Index may require actual column parameters rather than
strings (according
tohttp://www.sqlalchemy.org/docs/05/metadata.html#indexes)
. You may be
able to use something like the following after your class
definition:
Index('ix_name_type', MyClass.__table__.c.name,
MyClass.__table__.c.type, unique=True)
or even
Index('ix_name_type', MyClass.name, MyClass.type, unique=True)
Hope that helps,
Simon
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---