Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlalchemy一对多关系加入?_Python_Sqlalchemy_Flask_Flask Sqlalchemy - Fatal编程技术网

Python Sqlalchemy一对多关系加入?

Python Sqlalchemy一对多关系加入?,python,sqlalchemy,flask,flask-sqlalchemy,Python,Sqlalchemy,Flask,Flask Sqlalchemy,我正在尝试这样做一个简单的连接查询 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_catego

我正在尝试这样做一个简单的连接查询

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    |
并将食品类别id列替换为其他表中食品类别的实际名称


我的表/关系设置是否正确?我的查询设置正确吗

您的表和关系设置正确。您的查询需要更改

出现错误的原因是您试图对列(
Food\u Categories.Food\u 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)
请注意,在这种情况下,结果不是
食品
的实例,而是具有3列值的
元组