the indkey column of the pg_index view is an int2vector type (see 
http://www.postgresql.org/docs/8.3/static/catalog-pg-index.html), psycopg2 
returns these int2vectors as strings:

>>> c = psycopg2.connect(user='scott', password='tiger', host='localhost', 
>>> database='test')
>>> cursor = c.cursor()
>>> cursor.execute("select indkey from pg_index")
>>> cursor.fetchall()
[('1 2',), ('1 2',), ('1 2',), ('1 2',), ('1 2',), ('1 2',), ('1 2',), ….

it would appear pypostgresql converts the int2vector into lists.  
http://www.sqlalchemy.org/trac/ticket/2855 is added for this.

For now you’d need to use psycopg2 which runs on Python 3 and is the most 
commonly used database adapter for Postgresql.






On Oct 27, 2013, at 4:15 PM, Rich Wellner <[email protected]> wrote:

> I can reproduce this error in .8 and .9 series.
> 
> My SQL creation script:
> 
> create table invited_players (
>   invited_player_id integer NOT NULL primary key,
>   game_id integer NOT NULL,
>   player_id integer NOT NULL
> );
> 
> alter sequence invited_player_id_seq owned by 
> invited_players.invited_player_id;
> 
> create index invited_play_game_id_idx on invited_players (game_id);
> 
> My python:
> 
> #!/usr/local/bin/python3
> 
> from sqlalchemy import create_engine
> from sqlalchemy import create_engine, Integer, Column, MetaData, Table, 
> Sequence
> from sqlalchemy.orm import mapper, sessionmaker
> 
> class InvitedPlayers:
>   pass
> 
> engine = 
> create_engine("postgresql+pypostgresql://username:@localhost:5432/dbname", 
> echo=True)
> metadata = MetaData()
> metadata.bind = engine
> 
> invitedPlayers = Table("invited_players", metadata,
>   Column("invited_player_id", Integer, Sequence('invited_player_id_seq'), 
> primary_key=True),
>   autoload=True)
> 
> The error I receive below occurs when there are two indexes on the table (the 
> implicit primary key one and the explicit one I create on game_id). If only 
> the primary key index exists then sqlalchemy reflects the table properly. 
> Here's the error:
> 
> Traceback (most recent call last):
>   File "./autoload.py", line 16, in <module>
>     autoload=True)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/sql/schema.py",
>  line 355, in __new__
>     table._init(name, metadata, *args, **kw)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/sql/schema.py",
>  line 428, in _init
>     self._autoload(metadata, autoload_with, include_columns)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/sql/schema.py",
>  line 456, in _autoload
>     self, include_columns, exclude_columns
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/engine/base.py",
>  line 1579, in run_callable
>     return conn.run_callable(callable_, *args, **kwargs)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/engine/base.py",
>  line 1107, in run_callable
>     return callable_(self, *args, **kwargs)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/engine/default.py",
>  line 296, in reflecttable
>     return insp.reflecttable(table, include_columns, exclude_columns)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/engine/reflection.py",
>  line 576, in reflecttable
>     indexes = self.get_indexes(table_name, schema)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/engine/reflection.py",
>  line 383, in get_indexes
>     info_cache=self.info_cache, **kw)
>   File "<string>", line 1, in <lambda>
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/engine/reflection.py",
>  line 53, in cache
>     ret = fn(self, con, *args, **kw)
>   File 
> "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/sqlalchemy/dialects/postgresql/base.py",
>  line 2014, in get_indexes
>     index['key'] = [int(k.strip()) for k in idx_key.split()]
> AttributeError: 'Array' object has no attribute 'split'
> 
> -- 
> 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 [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to