Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 用炼金术进行查询_Python_Sql_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 用炼金术进行查询

Python 用炼金术进行查询,python,sql,sqlalchemy,flask-sqlalchemy,Python,Sql,Sqlalchemy,Flask Sqlalchemy,我正在使用Flask构建RESTful api,并使用SQLAlchemy将我的应用程序连接到MySQL数据库 数据库中有两个模型:订单和订单行。订单由多个订单行组成。每个订单行都有一个关联的状态 我在将SQL请求转换为Flask SQLAlchemy语句时遇到问题。我对加入特别感兴趣 以下是我的模型: class Order(db.Model): id = db.Column(db.Integer, primary_key=True) date_created = db.Col

我正在使用Flask构建RESTful api,并使用SQLAlchemy将我的应用程序连接到MySQL数据库

数据库中有两个模型:订单和订单行。订单由多个订单行组成。每个订单行都有一个关联的状态

我在将SQL请求转换为Flask SQLAlchemy语句时遇到问题。我对加入特别感兴趣

以下是我的模型:

class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date_created = db.Column(db.DateTime)
    lines = db.relationship('Order_line',
                            backref=db.backref('order',
                                               lazy='join'))
    def __init__(self, po):
        self.date_created = datetime.datetime.now()

class Order_line(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    order_id = db.Column(db.Integer, db.ForeignKey('order.id'))
    status_id = db.Column(db.Integer, db.ForeignKey('status.id'))

    def __init__(self, order_id):
        self.order_id = order_id
        self.status_id = 1

class Status(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    short_name = db.Column(db.String(60))
    description = db.Column(db.String(400))
    lines = db.relationship('Order_line',
                            backref=db.backref('status',
                                               lazy='join'))

    def __init__(self, short_name, description):
        self.short_name = short_name
        self.description = description
基本上,我想检索所有订单(因此检索Order.id),它们有一个或多个订单行的status\u id不同于1

SQL查询将是

SELECT id FROM `order`
INNER JOIN order_line
    ON order.id=order_line.order_id
WHERE
    order_line.status_id NOT LIKE 1
GROUP BY
    order.id

我没有找到将SQL语句转换为SQLAlchemy命令的方法。我对Flask SQLAlchemy包装纸和“香草”SQLAlchemy之间的区别感到特别困惑。

我对Flask SQLAlchemy也是新手,但最近我在我的应用程序中学到了很多东西。然后,有几点可以帮助您:

“vanilla”和Flask SQLAlchemy之间的主要区别在目前进行查询时,是Flas SQLAlchemy处理会话变量的方式。在Flask版本中,有一个db对象处理会话,如本例所示:

  db = SQLAlchemy()
使用该对象,您可以处理查询。在您的情况下,可以通过以下方式执行查询:

db.session.query(Order).filter(Order.id==Order_line.order_id).filter(Order_line.status_id!=1).group_by(Order.id).all()
这不是完全相同的查询,但非常相似。它将返回Order表中的所有字段,但如果您只需要“id”,则可以在查询语句中将“Order”更改为“Query.id”。您拥有的“like”过滤器我不完全确定如何在Flask SQLAlchemy中实现它,但我发现了这个问题,它为“香草”SQLAlchemy提供了答案:

您可以使用:

也可以使用

db.session.query(Order.id).filter(Order.lines.status_id != 1 ).group_by(Order.id).all()

这行代码在实际的flask应用程序中放在哪里?在
模型
视图
code?@AlexB中,它会出现在您想要查询资料的地方,因此通常是在视图函数中。更具体地说,是在下面的
视图
中的什么地方
class Table\u AView(ModelView):datamodel=SQLAInterface(AuctionTransactions)label\u columns={'Field\u A':'A'}list\u columns=['Field\u A']
@AlexB
ModelView
对于flask管理员来说是非常特殊的,看起来像,但我对此一无所知。您必须亲自阅读文档或提出一个新问题。谢谢您的回复。我感到震惊的是,一些非常简单的事情似乎很难实现。我一直在阅读flask appbuilder文档以及sqlalchemy对象关系教程,似乎没有人解释如何实际将查询应用到使用模板实现的视图。我的任务还在继续!
db.session.query(Order.id).filter(Order.lines.status_id != 1 ).group_by(Order.id).all()