[Sqlalchemy-tickets] Issue #4372: deferred Column attribute in CheckConstraint (zzzeek/sqlalchemy)
Brought to you by:
zzzeek
From: Dmytro S. <iss...@bi...> - 2018-11-22 14:36:02
|
New issue 4372: deferred Column attribute in CheckConstraint https://bitbucket.org/zzzeek/sqlalchemy/issues/4372/deferred-column-attribute-in Dmytro Starosud: This is using SQLAlchemy==1.2.14. ``` #!python from sqlalchemy import CheckConstraint, Column, DateTime, Integer, create_engine, func from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import deferred from sqlalchemy.pool import NullPool engine = create_engine('postgresql://***', poolclass=NullPool) connection = engine.connect() connection.begin_nested() Base = declarative_base() class MyEntity(Base): __tablename__ = 'my_entity' id = Column(Integer, primary_key=True) _internal_modified_at = deferred(Column( DateTime(timezone=True), nullable=False, index=True, server_default=func.now(), onupdate=func.now())) __table_args__ = ( CheckConstraint( _internal_modified_at == func.now(), 'my_entity_is_modified_now'), ) Base.metadata.create_all(connection) ``` Last line produces exception: ``` root@0d982765aeb0:/service# python main.py /usr/local/lib/python3.5/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>. """) Traceback (most recent call last): File "main.py", line 29, in <module> Base.metadata.create_all(connection) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/schema.py", line 4005, in create_all tables=tables) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1549, in _run_visitor **kwargs).traverse_single(element) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/visitors.py", line 121, in traverse_single return meth(obj, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/ddl.py", line 757, in visit_metadata _is_metadata_operation=True) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/visitors.py", line 121, in traverse_single return meth(obj, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/ddl.py", line 791, in visit_table include_foreign_key_constraints=include_foreign_key_constraints File "/usr/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 948, in execute return meth(self, multiparams, params) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/ddl.py", line 68, in _execute_on_connection return connection._execute_ddl(self, multiparams, params) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1003, in _execute_ddl if not self.schema_for_object.is_default else None) File "<string>", line 1, in <lambda> File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/elements.py", line 442, in compile return self._compiler(dialect, bind=bind, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/ddl.py", line 26, in _compiler return dialect.ddl_compiler(dialect, self, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 219, in __init__ self.string = self.process(self.statement, **compile_kwargs) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 245, in process return obj._compiler_dispatch(self, **kwargs) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch return meth(self, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 2502, in visit_create_table create.include_foreign_key_constraints) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 2549, in create_table_constraints for constraint in constraints File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 2547, in <genexpr> p for p in File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 2555, in <genexpr> not getattr(constraint, 'use_alter', False) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 245, in process return obj._compiler_dispatch(self, **kwargs) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/visitors.py", line 93, in _compiler_dispatch return meth(self, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 2732, in visit_check_constraint literal_binds=True) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 245, in process return obj._compiler_dispatch(self, **kwargs) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch return meth(self, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 1078, in visit_binary return self._generate_generic_binary(binary, opstring, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 1111, in _generate_generic_binary self, eager_grouping=eager_grouping, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/visitors.py", line 81, in _compiler_dispatch return meth(self, **kw) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 1242, in visit_bindparam bindparam, within_columns_clause=True, **kwargs) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 1275, in render_literal_bindparam return self.render_literal_value(value, bindparam.type) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/dialects/postgresql/base.py", line 1490, in render_literal_value value = super(PGCompiler, self).render_literal_value(value, type_) File "/usr/local/lib/python3.5/site-packages/sqlalchemy/sql/compiler.py", line 1293, in render_literal_value "Don't know how to literal-quote value %r" % value) NotImplementedError: Don't know how to literal-quote value <ColumnProperty at 0x7f12c9ff8dd8; _internal_modified_at> ``` |