Sqlalchemy 嗯,我也知道了,你是怎么启动Python外壳的?您是使用了/manage.py shell还是仅仅使用了python?@Miguel解决了这个问题,您在运行这个吗?错误父实例未绑定到会话表明您在终端的sessionI did u=User(username

Sqlalchemy 嗯,我也知道了,你是怎么启动Python外壳的?您是使用了/manage.py shell还是仅仅使用了python?@Miguel解决了这个问题,您在运行这个吗?错误父实例未绑定到会话表明您在终端的sessionI did u=User(username,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,嗯,我也知道了,你是怎么启动Python外壳的?您是使用了/manage.py shell还是仅仅使用了python?@Miguel解决了这个问题,您在运行这个吗?错误父实例未绑定到会话表明您在终端的sessionI did u=User(username='name',…)之外运行它,当我按enter键时,我得到了错误,或者如果我在提交时尝试从浏览器创建,我得到了相同的结果。您是如何启动Python shell的?您是使用了/manage.py shell还是仅仅使用了python?@Migu


嗯,我也知道了,你是怎么启动Python外壳的?您是使用了
/manage.py shell
还是仅仅使用了
python
?@Miguel解决了这个问题,您在运行这个吗?错误
父实例未绑定到会话
表明您在终端的sessionI did u=User(username='name',…)之外运行它,当我按enter键时,我得到了错误,或者如果我在提交时尝试从浏览器创建,我得到了相同的结果。您是如何启动Python shell的?您是使用了
/manage.py shell
还是仅仅使用了
python
?@Miguel解决了问题,谢谢。您能更具体地说明什么是不绑定到会话的意思吗?当然,我会查看链接,但如果可以的话,我只想简单解释一下please@quechon,通常在您访问网页时,它会跟踪您(以及每个用户)使用会话。您可以将此视为服务器一次跟踪多个用户正在做什么的一种方式。重要的是,它还跟踪谁在做什么,例如,您可能不希望任何人能够通过运行
u=user(…)来创建新用户
这是可以理解的,但我真正想要的是用户创建一个新帐户,但我不知道如何阻止这种情况的发生,如果我让您很难理解,我很抱歉,谢谢。请您更具体地说明什么是不绑定到会话的意思,当然,我会查看链接,但如果您愿意,我只想简单解释一下可以please@quechon,通常当您访问网页时,它会使用会话跟踪您(和每个用户)。您可以将此视为服务器一次跟踪多个用户正在做什么的一种方式。重要的是,它还跟踪谁在做什么,例如,你可能不希望任何人能够通过运行
u=user(…)
来创建一个新用户这是可以理解的,但我真正想要的是用户创建一个新帐户,但我真的不知道如何阻止这种情况发生,如果我给你带来困难,我很抱歉,谢谢
u = User (...)
Traceback (most recent call last)
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1994, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/quechon/PycharmProjects/untitled3/myapp/login/routes.py", line 66, in _register_process
timecreated=datetime.datetime.utcnow()
File "<string>", line 4, in __init__

File "/usr/lib/python3.6/site-packages/sqlalchemy/orm/state.py", line 414, in _initialize_instance
manager.dispatch.init_failure(self, args, kwargs)
File "/usr/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
compat.reraise(exc_type, exc_value, exc_tb)
File "/usr/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
raise value
File "/usr/lib/python3.6/site-packages/sqlalchemy/orm/state.py", line 411, in _initialize_instance
return manager.original_init(*mixed[1:], **kwargs)
File "/home/quechon/PycharmProjects/untitled3/myapp/models.py", line 80, in __init__
self.follow(self)
File "/home/quechon/PycharmProjects/untitled3/myapp/models.py", line 47, in follow
if not self.is_following(user):
File "/home/quechon/PycharmProjects/untitled3/myapp/models.py", line 57, in is_following
return self.followed.filter_by(followed_id=user.id).first() is not None
File "/usr/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 1517, in filter_by
return self.filter(sql.and_(*clauses))
File "<string>", line 2, in filter

File "/usr/lib/python3.6/site-packages/sqlalchemy/orm/base.py", line 198, in generate
self = args[0]._clone()
File "/usr/lib/python3.6/site-packages/sqlalchemy/orm/dynamic.py", line 278, in _clone
orm_util.instance_str(instance), self.attr.key))
sqlalchemy.orm.exc.DetachedInstanceError: Parent instance <User at 0x7fe2ac0e6e80> is not bound to a Session, and no contextual session is established; lazy load operation of attribute 'followed' cannot proceed
class User(db.Model):

    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100), unique=True)
    email = db.Column(db.String(100))
    password = db.Column(db.Binary)
    profilepic = db.Column(db.String)
    timecreated = db.Column(db.DateTime)

    #picture = db.relationship('Picture', backref='owner', lazy='dynamic')
    comment = db.relationship('Comment', backref='user', lazy='dynamic')
    post = db.relationship('Post', backref='user', lazy='dynamic')

    followed = db.relationship('Follow', foreign_keys=[Follow.follower_id],
                                backref=db.backref('follower', lazy='joined'),
                                lazy='dynamic',
                                cascade='all, delete-orphan')
    followers = db.relationship('Follow',
                                foreign_keys=[Follow.followed_id],
                                backref=db.backref('followed', lazy='joined'),
                                lazy='dynamic',
                                cascade='all, delete-orphan')

    def follow(self, user):
        if not self.is_following(user):
            f = Follow(follower=self, followed=user)
            db.session.add(f)

    def unfollow(self, user):
        f = self.followed.filter_by(followed_id=user.id).first()
        if f:
            db.session.delete(f)

    def is_following(self, user):
        return self.followed.filter_by(followed_id=user.id).first() is not None

    def is_followed_by(self, user):
        return self.followers.filter_by(follower_id=user.id).first() is not None

    @property
    def followed_posts(self):
        return Post.query.join(Follow.followed_id == Post.user_id)\
        .filter(Follow.follower_id == self.id)

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return str(self.id)

    def __init__(self, **kwargs):
        self.follow(self)

    def __repr__(self):
        return f'<id - {self.id} | - {self.username}>'