首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要在简单的地球化学查询中获得AttributeError InstanceState has no_post_inspect?

为什么我要在简单的地球化学查询中获得AttributeError InstanceState has no_post_inspect?
EN

Stack Overflow用户
提问于 2022-01-04 18:14:31
回答 1查看 1.1K关注 0票数 1

当我试图查询本地Postgres DB时,会出现以下错误:

发生了异常: AttributeError 'InstanceState‘对象没有属性'_post_inspect'

当我将数据加载到数据库时,连接可以正常工作。我想我错过了一些愚蠢的东西,但找不到我的错误。任何帮助我都会很高兴的。

数据库具有Postgis更新,并应接受外形几何LineString。使用的包:

postgresql-14.1-1-windows-x64

postgis_3_1_pg14

GeoAlchemy2 0.10.0

SQLAlchemy 1.4.23

[医] 1.7.5 %

psycopg2 2.9.3

我与以下方面建立联系:

代码语言:javascript
复制
engine = create_engine(DATABASE_URI)

# 'postgresql+psycopg2://postgres:mypassword@localhost:5432/shapedb'
Session = sessionmaker(bind=engine)

    @contextmanager # helper
    def session_scope():
        session = Session()
        try:
            yield session
            session.commit()
        except Exception:
            session.rollback()
            raise
        finally:
            session.close()

这就是我设置新条目的方式,似乎很好):

代码语言:javascript
复制
block1 = BlockPlanSimple(
        geometry = 'MULTILINESTRING((0 0, 21 21, 21 0), (0 0,20 0,20 50,0 50, 0 0))', 
        level = 0,
        room = 'ki',
        roomarea = 23.4,
        scheme_code = '4223_v2',
        house_width = 20.777,
        house_depth = 12.999,
        id_code = '0_v4_12000_99999',
    )


with session_scope() as s:
    # 
    # s.add(block1)
    q1 = s.query(block1).first()
    # print(q1)

模型是这样的:

代码语言:javascript
复制
Base = declarative_base()
class BlockPlanSimple(Base):
    __tablename__ = 'BlockPlanSimple'
    id = Column(Integer, primary_key=True)
    geometry = Column(Geometry, nullable=False) #?? postgis ->geometry
    # geometry = Column(String, nullable=False) #  postgres ->str
    level = Column(Integer, nullable=False)
    room = Column(String)
    roomarea = Column(Float)
    scheme_code = Column(String(64), index=True, nullable=False)
    house_width = Column(Float, index=True, nullable=False)
    house_depth = Column(Float, index=True, nullable=False)
    id_code = Column(String(64), index=True, unique=True)

完全错误(在vs代码中):

发生了异常: AttributeError 'InstanceState‘对象没有属性'_post_inspect’文件第56行,在q1 = s.query(block1).first()

EN

回答 1

Stack Overflow用户

发布于 2022-01-08 11:57:59

当传递模型类的实例而不是模型类的实例时,Session.query()会发生此错误:

代码语言:javascript
复制
import sqlalchemy as sa
from sqlalchemy import orm

Base = orm.declarative_base()


class Thing(Base):
    __tablename__ = 't70583312'

    id = sa.Column(sa.Integer, primary_key=True)
    name = sa.Column(sa.String)


engine = sa.create_engine('postgresql:///test', echo=True, future=True)
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
Session = orm.sessionmaker(engine, future=True)

with orm.Session(engine, future=True) as s:
    instance_of_thing = Thing(name='Thing 1')
    s.add(instance_of_thing)

    # ↓↓ This should be s.query(Thing)
    s.query(instance_of_thing)

在2.0风格的select中也有同样的错误

代码语言:javascript
复制
q = sa.select(instance_of_thing)

这一系列例外情况的结果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/sql/coercions.py", line 183, in expect
    resolved = insp.__clause_element__()
AttributeError: 'InstanceState' object has no attribute '__clause_element__'. Did you mean: 'is_clause_element'?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/user/python_projects/so38/so70583312.py", line 29, in <module>
    q = sa.select(instance_of_thing)
  File "<string>", line 2, in select
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/sql/selectable.py", line 5281, in _create
    return cls._create_future_select(*args)
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/sql/selectable.py", line 5199, in _create_future_select
    self._raw_columns = [
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/sql/selectable.py", line 5200, in <listcomp>
    coercions.expect(
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/sql/coercions.py", line 185, in expect
    impl._raise_for_expected(original_element, argname)
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/sql/coercions.py", line 437, in _raise_for_expected
    return super(_SelectIsNotFrom, self)._raise_for_expected(
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/sql/coercions.py", line 283, in _raise_for_expected
    util.raise_(exc.ArgumentError(msg, code=code), replace_context=err)
  File "/home/user/virtual-envs/so310/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
sqlalchemy.exc.ArgumentError: Column expression or FROM clause expected, got <__main__.Thing object at 0x7ff53e0f7f70>.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70583312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档