문제

이와 같은 간단한 조인 쿼리를 수행하려고 합니다.

SELECT food._id, food.food_name, food_categories.food_categories FROM food JOIN food_categories ON food.food_category_id = food_categories._id

하지만 계속 오류가 발생합니다.내 수업이 설정되는 방법은 다음과 같습니다.

class Food_Categories(db.Model):
    __tablename__ = 'food_categories'
    _id = db.Column(db.Integer, primary_key=True)
    food_categories = db.Column(db.String(30))

class Food(db.Model):
    __tablename__ = 'food'
    _id = db.Column(db.Integer, primary_key=True)
    food_name = db.Column(db.String(40))
    food_category_id = db.Column(db.Integer, ForeignKey(Food_Categories._id))
    food_category = relationship("Food_Categories")

내 쿼리 기능은 다음과 같습니다.

@app.route('/foodlist')
def foodlist():
    if request.method == 'GET':
        results = Food.query.join(Food_Categories.food_categories).all()

    json_results = []
    for result in results:
        d = {'_id': result._id,
         'food': result.food_name,
         'food_category': result.food_categories}
    json_results.append(d)

    return jsonify(user=json_results)

플라스크를 사용하고 있습니다.경로를 호출하면 이 오류가 발생합니다.

AttributeError: 'ColumnProperty' object has no attribute 'mapper'

나는 본질적으로 이것을 원합니다 :

|      id       |    food_name    |    food_category    |

food_category_id 열을 다른 테이블에 있는 음식 카테고리의 실제 이름으로 바꾸세요.

내 테이블/관계가 올바르게 설정되어 있나요?내 쿼리가 올바르게 설정되어 있나요?

도움이 되었습니까?

해결책

테이블과 관계가 올바르게 설정되었습니다.쿼리를 변경해야 합니다.

오류가 발생하는 이유는 열(Food_Categories.food_categories) 대신 테이블(또는 매핑된 모델 객체)을 사용합니다.기술적으로 오류를 수정하려면 쿼리를 아래 쿼리로 바꿔야 합니다.

results = Food.query.join(Food_Categories).all()

이렇게 하면 오류가 수정되지만 SQL 원하는 명령문은 다음의 인스턴스를 반환하기 때문입니다. Food 조인이 있더라도 결과로만 가능합니다.

정확하게 생성되는 쿼리를 작성하려면 SQL 당신이 염두에 두고 있는 진술:

results = (db.session.query(Food._id, Food.food_name,
        Food_Categories.food_categories,)
    .join(Food_Categories)).all()
for x in results:
    # print(x)
    print(x._id, x.food_name, x.food_categories)

이 경우 결과는 다음의 인스턴스가 아니라는 점에 유의하세요. Food, 하지만 오히려 tuples 3개의 열 값이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top