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}>'