![](/img/trans.png)
[英]AttributeError: 'Table' object has no attribute 'table' in flask sqlalchemy association table
[英]Python returns AttributeError when querying a SQLAlchemy association table ('function' object has no attribute 'c')
我有一个名为“followers”的 Flask-SQLAlchemy 关联表,当我通过 REPL 运行查询以下查询时,它运行良好,但是在 Flask 应用程序上运行代码时,它给了我错误“'AttributeError:'function' object has no属性'c'”。
调用查询的函数
@app.route('/following/<int:user_id>', methods=['GET'])
@login_required
def following(user_id):
"""
Show all the Tutors the user is following
"""
user = Users.query.get(user_id)
page = request.args.get('page', 1, type=int)
result = db.session.query(Users, Tutors)\
.join(Tutors, Tutors.user_id==Users.id ,full=True)\
.join(followers, Tutors.id == followers.c.followed_id)\
.filter(user_id==followers.c.follower_id).all()
next_url = url_for('index', page=result.next_num) if result.has_next else None
prev_url = url_for('index', page=result.prev_num) if result.has_prev else None
data = {}
data['user'] = []
data['tutor'] = []
rows = len(result.items)
for i in range(rows):
data['user'].append(result.items[i][0])
data['tutor'].append(result.items[i][1])
return render_template('index.html', title='Following',
data=data, rows=rows,
next_url=next_url, prev_url=prev_url)
只是查询
result = db.session.query(Users, Tutors)\
.join(Tutors, Tutors.user_id==Users.id ,full=True)\
.join(followers, Tutors.id == followers.c.followed_id)\
.filter(user_id==followers.c.follower_id).all()
楷模
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('users.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('tutors.id'))
)
class Users(UserMixin, db.Model):
__tablename__ = 'users'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
... (other non-related properties)
followed = db.relationship('Tutors', secondary=followers, lazy='dynamic',
backref=db.backref('followers', lazy='dynamic'))
class Tutors(db.Model):
__tablename__ = 'tutors'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
... (other non-related properties)
错误回溯
Error on request:
Traceback (most recent call last):
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/werkzeug/serving.py", line 323, in run_wsgi
execute(self.server.app)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/werkzeug/serving.py", line 312, in execute
application_iter = app(environ, start_response)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/richardnienkotter/Documents/Projects/codetutors/env/lib/python3.8/site-packages/flask_login/utils.py", line 272, in decorated_view
return func(*args, **kwargs)
File "/Users/richardnienkotter/Documents/Projects/codetutors/app/routes.py", line 134, in following
result = db.session.query(Users, Tutors, followers.c.follower_id, followers.c.followed_id)\
AttributeError: 'function' object has no attribute 'c'
在调试控制台上使用 type() 表明 'followers' 是一个函数,这就是问题的根源,但为什么将它作为函数调用?
在 routes.py 中,视图函数和关联表的名称相同,这导致了问题。
感谢阿比的帮助:)
请检查名为"/Users/richardnienkotter/Documents/Projects/codetutors/app/routes.py", line 134, in following
的文件"/Users/richardnienkotter/Documents/Projects/codetutors/app/routes.py", line 134, in following
可能有一个名为followers
的函数,这与您命名为followers
的表相矛盾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.