I am seeing a behavior similar to Issue #3402 but it exists in SQLAlchemy
1.0.6 and it involves using geoalchemy2. I have filed an issue there but
since it is behaving differently in sqlalchemy 0.9.3, I wanted to raise it
here as well.
Test program:
import geoalchemy2
from sqlalchemy import *
> from sqlalchemy.orm import *
> from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
> user = 'user'
> password = 'pword'
> host = 'localhost'
> port = '5432'
> db_name = 'dev'
> db_uri = 'postgresql+psycopg2://%s:%s@%s:%s/%s' % (user,
> password,
> host,
> port,
> db_name)
> engine = create_engine(db_uri)
> Base.metadata.create_all(engine)
>
> class A(Base):
> __tablename__ = 'tests'
> id = Column(Integer, primary_key=True)
> geom = Column(geoalchemy2.Geometry('POLYGON'))
>
> s = Session(engine)
> A.__table__.create(engine)
> s.add(A(id = 1, geom='POLYGON((0 0,1 0,1 1,0 1,0 0))'))
> s.commit()
> a1 = s.query(A).first()
> a1.geom = None
> s.commit()
> A.__table__.drop(engine)
Trace:
> Traceback (most recent call last):
>
File "sqatest.py", line 38, in <module>
> s.commit()
> File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py",
> line 790, in commit
> self.transaction.commit()
> File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py",
> line 392, in commit
> self._prepare_impl()
> File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py",
> line 372, in _prepare_impl
> self.session.flush()
> File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py",
> line 2004, in flush
> self._flush(objects)
> File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py",
> line 2122, in _flush
> transaction.rollback(_capture_exception=True)
> File
> "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py",
> line 60, in __exit__
> compat.reraise(exc_type, exc_value, exc_tb)
> File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py",
> line 2086, in _flush
> flush_context.execute()
> File
> "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line
> 373, in execute
> rec.execute(self)
> File
> "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line
> 532, in execute
> uow
> File
> "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py",
> line 170, in save_obj
> mapper, table, update)
> File
> "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py",
> line 630, in _emit_update_statements
> lambda rec: (
> File
> "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py",
> line 459, in _collect_update_commands
> value, state.committed_state[propkey]):
> File
> "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line
> 2726, in __bool__
> raise TypeError("Boolean value of this clause is not defined")
> TypeError: Boolean value of this clause is not defined
This only happens when a 'geom' attribute is defined with a valid geometry
and then assigned 'None'
Assigning an initial geom value of None does not cause an issue. It also
works fine as written in sqlalchemy 0.9.3
I would love to know if this needs to be addressed in geoalchemy2 or is
truly a sqlalchemy 1.0
--
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/d/optout.