Hi I have seen two/three ways to declare index on table:

1. use index=True

class Model(Base):
    __tablename__ = "model"
    id = sa.Column(sa.Integer, primary_key=True)
    field_1 = sa.Column(sa.Integer, index=True)

2. use __table_args__:

class Model(Base):
    __tablename__ = "model"
    id = sa.Column(sa.Integer)
    field_1 = sa.Column(sa.Integer)

    __table_args__ = (sa.Index("field_1_index", "field_1"))

3. use Index statement:

class Model(Base):
    __tablename__ = "model"
    id = sa.Column(sa.Integer)
    field_1 = sa.Column(sa.Integer)

Index("field_1_index", "field1") 

My question is what's the difference between these 3? Also if I have mixed 
two of them, what will happen?  By this I mean consider the following 
example;

class Model(Base):
    __tablename__ = "model"
    id = sa.Column(sa.Integer, *primary_key=True*)
    field_1 = sa.Column(sa.Integer)

    __table_args__ = (*sa.Index("field_1_index", "field_1")*)

Here we are mixing method 1 and 2. From my experiment it seems Postgres can 
accept this without any problem but Sqlite rejects it outright. Why this 
happens?

Thanks!
Bob

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/6c7b8117-ff49-4b80-96b9-d4a202d7e475n%40googlegroups.com.

Reply via email to