当我试图查询本地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
我与以下方面建立联系:
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()这就是我设置新条目的方式,似乎很好):
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)模型是这样的:
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()中
发布于 2022-01-08 11:57:59
当传递模型类的实例而不是模型类的实例时,Session.query()会发生此错误:
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中也有同样的错误
q = sa.select(instance_of_thing)这一系列例外情况的结果:
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>.https://stackoverflow.com/questions/70583312
复制相似问题