Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQL炼金术与postgresql产生错误“;在列';的行中找不到列;attype'&引用;_Python_Postgresql_Sqlalchemy - Fatal编程技术网

Python SQL炼金术与postgresql产生错误“;在列';的行中找不到列;attype'&引用;

Python SQL炼金术与postgresql产生错误“;在列';的行中找不到列;attype'&引用;,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我正在使用SQLAlchemy连接到postgresql数据库。我有: >>> my_engine = create_engine("postgresql://username@localhost:5432/dbname") >>> my_metadata = MetaData(bind = my_engine) (数据库中没有密码。)这些操作没有任何问题,但我无法反映表: >>> my_metadata.reflect() 并获取错误:

我正在使用SQLAlchemy连接到postgresql数据库。我有:

>>> my_engine = create_engine("postgresql://username@localhost:5432/dbname")
>>> my_metadata = MetaData(bind = my_engine)
(数据库中没有密码。)这些操作没有任何问题,但我无法反映表:

>>> my_metadata.reflect()
并获取错误:

sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'attype'"
这是什么原因造成的?如何修复?它看起来像是架构级别的东西,但我无法理解。我可以连接到一个MySQL数据库,并反映表没有任何问题

编辑:SqlAlchemy 0.9.2,psql服务器9.2.5,psql客户端8.4.13,psycopg2 2.5.1

编辑:使用echo=True

INFO:root:Creating music_engine postgresql://postgres@localhost/musicbrainz_db
INFO:sqlalchemy.engine.base.Engine:select version()
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:select current_schema()
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:show standard_conforming_strings
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:SELECT relname FROM pg_class c WHERE relkind = 'r' AND 'echonest' = (select nspname from pg_namespace n where n.oid = c.re
lnamespace)
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:
            SELECT c.oid
            FROM pg_catalog.pg_class c
            LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
            WHERE (pg_catalog.pg_table_is_visible(c.oid))
            AND c.relname = %(table_name)s AND c.relkind in ('r','v')

INFO:sqlalchemy.engine.base.Engine:{'table_name': u'status'}
INFO:sqlalchemy.engine.base.Engine:
            SELECT a.attname,
              pg_catalog.format_type(a.atttypid, a.atttypmod),
              (SELECT pg_catalog.pg_get_expr(d.adbin, d.adrelid)
                FROM pg_catalog.pg_attrdef d
               WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum
               AND a.atthasdef)
              AS DEFAULT,
              a.attnotnull, a.attnum, a.attrelid as table_oid
            FROM pg_catalog.pg_attribute a
            WHERE a.attrelid = %(table_oid)s
            AND a.attnum > 0 AND NOT a.attisdropped
            ORDER BY a.attnum

INFO:sqlalchemy.engine.base.Engine:{'table_oid': 19271}
INFO:sqlalchemy.engine.base.Engine:
            SELECT t.typname as "name",
               pg_catalog.format_type(t.typbasetype, t.typtypmod) as "attype",
               not t.typnotnull as "nullable",
               t.typdefault as "default",
               pg_catalog.pg_type_is_visible(t.oid) as "visible",
               n.nspname as "schema"
            FROM pg_catalog.pg_type t
               LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
            WHERE t.typtype = 'd'

INFO:sqlalchemy.engine.base.Engine:{}

问题确实与版本有关,但在Python和psycopg2中,不是SQLAlchemy或PostgresQL


我在python2.6站点包中安装了SQLAlchemy。我适当地设置了PYTHONPATH,所以我认为无论我使用python2.6还是python2.7都无关紧要。但是,这确实很重要,因为SQLAlchemy总是为python2.6调用psycopg2,并且为python2.6编译的psycopg2的本机部分与python2.7不兼容。

据猜测,您的SQLAlchemy对于正在运行的PostgreSQL版本来说太旧了。什么SQLAlchemy版本,psycopg2版本,PostgreSQL版本?啊,应该包括这个。编辑为add.Hm,好的,现在Pg和SQLAlchemy相当流行。旧的libpq应该不太重要,尽管它很奇怪。您能显示SQLAlchemy正在运行的实际查询吗?PostgreSQL日志,带有
log\u语句='all'
,应该可以这样做。这样好吗?(echonest是数据库中的模式之一)哪种模式导致错误?您的日志不会显示错误。他们都失败了吗?就一个?