Closed lvqier closed 10 years ago
Same here.
ERROR: 'RelationshipProperty' object has no attribute 'columns'
> /usr/lib/python2.7/dist-packages/formalchemy/fields.py(1859)_columns()
-> return prop.columns
(Pdb) w
[...]
/home/smurf/pybble/pybble/blueprint/_admin/__init__.py(78)object_edit()
-> fields = FieldSet(obj)
/usr/lib/python2.7/dist-packages/formalchemy/forms.py(330)__init__()
-> L = [fields.AttributeField(attr, self) for attr in attrs]
/usr/lib/python2.7/dist-packages/formalchemy/fields.py(1767)__init__()
-> _columns = self._columns
> /usr/lib/python2.7/dist-packages/formalchemy/fields.py(1859)_columns()
-> return prop.columns
(Pdb) u
> /usr/lib/python2.7/dist-packages/formalchemy/fields.py(1767)__init__()
-> _columns = self._columns
(Pdb) u
> /usr/lib/python2.7/dist-packages/formalchemy/forms.py(330)__init__()
-> L = [fields.AttributeField(attr, self) for attr in attrs]
(Pdb) p attrs
[<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7fb7f6063a90>, <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7fb7f606f5d0>, <sqlalchemy.orm.attributes.propertyProxy object at 0x7fb7f5af3810>, <sqlalchemy.orm.attributes.propertyProxy object at 0x7fb7f5afa3d0>]
(Pdb) d
> /usr/lib/python2.7/dist-packages/formalchemy/fields.py(1767)__init__()
-> _columns = self._columns
(Pdb) p self
<formalchemy.fields.AttributeField object at 0x7fb7f59d2b50>
(Pdb) d
> /usr/lib/python2.7/dist-packages/formalchemy/fields.py(1859)_columns()
-> return prop.columns
(Pdb) p prop
<RelationshipProperty at 0x7fb7f5d0aed0; parent>
(Pdb) p prop.__dict__
{'key': u'parent', 'synchronize_pairs': [(Column('id', Integer(), table=<obj>, primary_key=True, nullable=False), Column('parent_id', Integer(), ForeignKey(u'obj.id'), table=<obj>))], 'lazy': True, 'uselist': False, 'collection_class': None, 'back_populates': 'children', 'innerjoin': False, 'cascade_backrefs': True, 'mapper': <Mapper at 0x7fb7f67b3910; Object>, 'order_by': False, '_calculated_foreign_keys': set([Column('parent_id', Integer(), ForeignKey(u'obj.id'), table=<obj>)]), '_cascade': CascadeOptions('merge,save-update'), 'join_depth': None, 'strategy': <sqlalchemy.orm.strategies.LazyLoader object at 0x7fb7f5d26990>, '_lazy_strategy': <sqlalchemy.orm.strategies.LazyLoader object at 0x7fb7f5d26c90>, '_is_self_referential': True, 'enable_typechecks': True, 'passive_deletes': False, '_dependency_processor': ManyToOneDP(Object.parent), 'remote_side': set([Column('id', Integer(), table=<obj>, primary_key=True, nullable=False)]), 'single_parent': False, '_configure_finished': True, 'post_update': False, 'direction': symbol('MANYTOONE'), '_strategies': {<class 'sqlalchemy.orm.strategies.LazyLoader'>: <sqlalchemy.orm.strategies.LazyLoader object at 0x7fb7f5d26c90>, (('lazy', 'select'),): <sqlalchemy.orm.strategies.LazyLoader object at 0x7fb7f5d26c90>, (('lazy', True),): <sqlalchemy.orm.strategies.LazyLoader object at 0x7fb7f5d26990>}, 'parent': <Mapper at 0x7fb7f67b3910; Object>, 'load_on_pending': False, 'comparator_factory': <class 'sqlalchemy.orm.relationships.Comparator'>, 'argument': <Mapper at 0x7fb7f67b3910; Object>, 'local_columns': set([Column('parent_id', Integer(), ForeignKey(u'obj.id'), table=<obj>)]), '_configure_started': True, 'active_history': False, '_creation_order': 376, '_join_condition': <sqlalchemy.orm.relationships.JoinCondition object at 0x7fb7f5d26650>, 'local_remote_pairs': [(Column('parent_id', Integer(), ForeignKey(u'obj.id'), table=<obj>), Column('id', Integer(), table=<obj>, primary_key=True, nullable=False))], 'secondary': None, '_reverse_property': set([<RelationshipProperty at 0x7fb7f67a5690; children>]), 'viewonly': False, 'comparator': <sqlalchemy.orm.relationships.Comparator object at 0x7fb7f5d0af10>, 'extension': None, 'secondaryjoin': None, 'doc': None, 'passive_updates': True, 'query_class': None, 'strategy_class': <class 'sqlalchemy.orm.strategies.LazyLoader'>, 'primaryjoin': <sqlalchemy.sql.elements.BinaryExpression object at 0x7fb7f5d26850>, 'target': Table('obj', MetaData(bind=None), Column('id', Integer(), table=<obj>, primary_key=True, nullable=False), Column('owner_id', Integer(), ForeignKey(u'obj.id'), table=<obj>), Column('parent_id', Integer(), ForeignKey(u'obj.id'), table=<obj>), Column('superparent_id', Integer(), ForeignKey(u'obj.id'), table=<obj>), Column('discriminator', Integer(), ForeignKey(u'discriminator.id'), table=<obj>, nullable=False), schema=None), '_user_defined_foreign_keys': set([Column('parent_id', Integer(), ForeignKey(u'obj.id'), table=<obj>)]), 'backref': None, 'secondary_synchronize_pairs': [], 'distinct_target_key': None}
(Pdb)
"parent" is a rather boring relationship on the same table:
id = Column(Integer, primary_key=True, label="ID", renderer=IDrenderer)
parent_id = Column(Integer,ForeignKey(id), index=True) # direct ancestor (replied-to comment)
children = relationship("Object", backref=backref('parent', remote_side=[id]), foreign_keys=(parent_id,), order_by="Object.id")
I can't reproduce that with current sqlalchemy:
$ python
Python 2.7.6 (default, Mar 22 2014, 15:40:47) [GCC 4.8.2] on linux2
>>> from sqlalchemy.sql.expression import Function
>>>
@smurfix Are you sure that you're using the latest version of SQLAlchemy?
$ pip freeze|grep -i SQLA
SQLAlchemy==0.9.4
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sqlalchemy.sql.expression import Function
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name Function
>>> from sqlalchemy.sql.expression import _Function
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name _Function
>>>
Hi,
benbeanfield:
@smurfix Are you sure that you're using the latest version of SQLAlchemy?
I am using the latest version from git, where this bug appears to be fixed.
smurf@desk:~$ python Python 2.7.6 (default, Mar 22 2014, 15:40:47) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information.
from sqlalchemy.sql.expression import Function import sqlalchemy sqlalchemy.version '0.9.5'
You might want to petition the sqlalchemy maintainer to cut a new release.
-- Matthias Urlichs
sqlalchemy has released, so closing this.
It seems that the SQLAlchemy 0.9 does neither provide Function nor _Function in package sqlalchemy.sql.expression. I meet import error when running FormAlchemy 1.4.3 with SQLAlchemy 0.9: