[sqlalchemy] Re: Weird NameError: name is not defined - can not establish relationship

Fri, 26 Oct 2018 03:26:05 -0700

Ok, fixed it - Base must be excluded

class Account(db.Model)



Am Freitag, 26. Oktober 2018 12:18:21 UTC+2 schrieb yuri:
>
> Hi, I've got strange problem - I have funktioning model with several 
> relationshps. I wanted to add additional table 'Account' that already 
> existed in the database and create one-to-one relationship to User. 
> *Indendently* both ot the classes work and can be queried, however if I'm 
> trying to establish relationship between them I get following error:
>
> NameError: name 'Account' is not defined
>
> Are there any restrictions dealing with connections
>
> My classes are:
> class User(UserMixin, db.Model):
>     id = db.Column(db.Integer, primary_key=True)
>     username = db.Column(db.String(64), index=True, unique=True)
>     email = db.Column(db.String(120), index=True, unique=True)
>     password_hash = db.Column(db.String(128))
>     last_message_read_time = db.Column(db.DateTime)
>     notifications = db.relationship('Notification', backref='user',
>                                     lazy='dynamic')
>     messages_sent = db.relationship('Message',
>                                     foreign_keys='Message.sender_id',
>                                     backref='author', lazy='dynamic')
>     account = db.relationship('Account', uselist=False, back_populates=
> "user")
>
>
> class Account(Base, db.Model):
>     __tablename__ = 'account'
>     __table_args__ = {'schema': 'salesforce'}
>
>     external_registration_code__c = db.Column(db.String(12))
>     name = db.Column(db.String(255))
>     isdeleted = db.Column(db.Boolean)
>     systemmodstamp = db.Column(db.DateTime, index=True)
>     heroku_login__c = db.Column(db.Boolean)
>     createddate = db.Column(db.DateTime)
>     type = db.Column(db.String(40))
>     website = db.Column(db.String(255))
>     firstname = db.Column(db.String(40))
>     description = db.Column(db.Text)
>     sfid = db.Column(db.String(18), unique=True)
>     id = db.Column(db.Integer, primary_key=True, server_default=db.text(
> "nextval('salesforce.account_id_seq'::regclass)"))
>     _hc_lastop = db.Column(db.String(32))
>     _hc_err = db.Column(db.Text)
>     personemail = db.Column(db.String(80))
>     recordtypeid = db.Column(db.String(18))
>     lastname = db.Column(db.String(80))
>     persontitle = db.Column(db.String(80))
>     custom_user__c = db.Column(db.Integer, db.ForeignKey('user.id'))
>     user = db.relationship('User', back_populates='account')
>
> Traceback (most recent call last):
>   File "<console>", line 1, in <module>
>   File 
> "/Users/ygavrylenko/dev/capp/venv/lib/python3.7/site-packages/flask_sqlalchemy/__init__.py",
>  
> line 512, in __get__
>     mapper = orm.class_mapper(type)
>   File 
> "/Users/ygavrylenko/dev/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/base.py",
>  
> line 421, in class_mapper
>     mapper = _inspect_mapped_class(class_, configure=configure)
>   File 
> "/Users/usr/heroku/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/base.py",
>  
> line 400, in _inspect_mapped_class
>     mapper._configure_all()
>   File 
> "/Users/usr/heroku/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/mapper.py",
>  
> line 1276, in _configure_all
>     configure_mappers()
>   File 
> "/Users/usr/heroku/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/mapper.py",
>  
> line 3033, in configure_mappers
>     mapper._post_configure_properties()
>   File 
> "/Users/usr/heroku/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/mapper.py",
>  
> line 1832, in _post_configure_properties
>     prop.init()
>   File 
> "/Users/usr/heroku/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/interfaces.py",
>  
> line 183, in init
>     self.do_init()
>   File 
> "/Users/usr/dev/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/relationships.py",
>  
> line 1655, in do_init
>     self._process_dependent_arguments()
>   File 
> "/Users/usr/dev/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/relationships.py",
>  
> line 1712, in _process_dependent_arguments
>     self.target = self.mapper.mapped_table
>   File 
> "/Users/usr/dev/capp/venv/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py",
>  
> line 767, in __get__
>     obj.__dict__[self.__name__] = result = self.fget(obj)
>   File 
> "/Users/usr/dev/capp/venv/lib/python3.7/site-packages/sqlalchemy/orm/relationships.py",
>  
> line 1628, in mapper
>     argument = self.argument()
>   File 
> "/Users/usr/dev/capp/venv/lib/python3.7/site-packages/sqlalchemy/ext/declarative/clsregistry.py",
>  
> line 293, in __call__
>     (self.prop.parent, self.arg, n.args[0], self.cls)
> sqlalchemy.exc.InvalidRequestError: When initializing mapper 
> Mapper|User|user, expression 'Account' failed to locate a name ("name 
> 'Account' is not defined"). If this is a class name, consider adding this 
> relationship() to the <class 'app.models.User'> class after both dependent 
> classes have been defined.
>
>
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to