On 04/21/2016 06:00 AM, Piotr Dobrogost wrote:
On Wednesday, April 20, 2016 at 3:38:01 PM UTC+2, Mike Bayer wrote:


    you can put "id" in declared_attr, should work:

    class Model(Base):
          @declared_attr
          def id(cls):
              return Column(Integer, Sequence(cls.__tablename__ +
    "id_seq"), ...)



Id does not work due to "sqlalchemy.exc.ArgumentError: Column-based
expression object expected for argument 'remote_side'; got:
'<sqlalchemy.ext.declarative.api.declared_attr object at
0x7f6b0a6b8870>', type <class
'sqlalchemy.ext.declarative.api.declared_attr'>" error. It looks like
remote_side is not aware of declared_attr. Should it be?


Traceback (most recent call last):
   File
"/opt/pycharm/pycharm-2016.1.2/helpers/pycharm/pycharm_load_entry_point.py",
line 12, in <module>
     sys.exit(f())
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/pyramid/scripts/pserve.py",
line 60, in main
     return command.run()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/pyramid/scripts/pserve.py",
line 367, in run
     global_conf=vars)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/pyramid/scripts/pserve.py",
line 402, in loadapp
     return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/paste/deploy/loadwsgi.py",
line 247, in loadapp
     return loadobj(APP, uri, name=name, **kw)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/paste/deploy/loadwsgi.py",
line 272, in loadobj
     return context.create()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/paste/deploy/loadwsgi.py",
line 710, in create
     return self.object_type.invoke(self)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/paste/deploy/loadwsgi.py",
line 203, in invoke
     app = context.app_context.create()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/paste/deploy/loadwsgi.py",
line 710, in create
     return self.object_type.invoke(self)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/paste/deploy/loadwsgi.py",
line 146, in invoke
     return fix_call(context.object, context.global_conf,
**context.local_conf)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/paste/deploy/util.py",
line 55, in fix_call
     val = callable(*args, **kw)
   File "/home/piotr/projects/kotti/kotti/__init__.py", line 188, in main
     initialize_sql(engine)
   File "/home/piotr/projects/kotti/kotti/resources.py", line 885, in
initialize_sql
     populate()
   File "/home/piotr/projects/kotti/kotti/populate.py", line 47, in populate
     if DBSession.query(Node.id).count() == 0:
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py",
line 157, in do
     return getattr(self.registry(), name)(*args, **kwargs)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/session.py",
line 1260, in query
     return self._query_cls(entities, self, **kwargs)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/query.py",
line 110, in __init__
     self._set_entities(entities)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/query.py",
line 120, in _set_entities
     self._set_entity_selectables(self._entities)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/query.py",
line 137, in _set_entity_selectables
     ext_info.mapper._equivalent_columns
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/query.py",
line 153, in _mapper_loads_polymorphically_with
     for m2 in mapper._with_polymorphic_mappers or [mapper]:
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py",
line 754, in __get__
     obj.__dict__[self.__name__] = result = self.fget(obj)
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py",
line 1893, in _with_polymorphic_mappers
     configure_mappers()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py",
line 2768, in configure_mappers
     mapper._post_configure_properties()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py",
line 1710, in _post_configure_properties
     prop.init()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/interfaces.py",
line 183, in init
     self.do_init()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py",
line 1628, in do_init
     self._process_dependent_arguments()
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py",
line 1683, in _process_dependent_arguments
     util.to_column_set(self.remote_side))
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py",
line 1682, in <genexpr>
     for x in
   File
"/home/piotr/.virtualenvs/kotti/lib/python2.7/site-packages/sqlalchemy/sql/elements.py",
line 3820, in _only_column_elements
     "'%s'; got: '%s', type %s" % (name, element, type(element)))
sqlalchemy.exc.ArgumentError: Column-based expression object expected
for argument 'remote_side'; got:
'<sqlalchemy.ext.declarative.api.declared_attr object at
0x7f6b0a6b8870>', type <class
'sqlalchemy.ext.declarative.api.declared_attr'>

if you're referring to the name "id" directly in the class declaration, then yes once you turn it into @declared_attr that won't work anymore. Use the string form for inline declarations:

class MyClass(Base):
   # ...

   something = relationship("Bar", remote_side="MyClass.id")






Regards,
Piotr  Dobrogost

--
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 sqlalchemy+unsubscr...@googlegroups.com
<mailto:sqlalchemy+unsubscr...@googlegroups.com>.
To post to this group, send email to sqlalchemy@googlegroups.com
<mailto:sqlalchemy@googlegroups.com>.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to