gpt4 book ai didi

python - 了解 SQLAlchemy 中的中间 SQL 语句

转载 作者:行者123 更新时间:2023-11-30 23:49:18 25 4
gpt4 key购买 nike

所以我有一个表格,我希望用户能够按照他们想要的顺序查看该表格。这是一个例子:

class Thing(Base):
__tablename__ = 'thing'
id = Column(Integer, primary_key=True)
amount = Column(Integer)
date = Column(DateTime, default=datetime.now())

def __init__(self, amount):
self.amount = amount

所以我想进行以下查询:

 if sort == 'amount':
orderby = Thing.amount.desc()
elif sort == 'date':
orderby = Thing.date.desc()

things = DBSession.query(Thing).order_by(orderby).all()

主要问题:

  1. 当我设置 orderby 语句时,我实际上是在调用任何内容还是只是设置了该语句?
  2. 我的做法正确且有效吗?
  3. 我可以使用过滤器执行类似的操作吗?

    filterby = Thing.amount == 5

    things = DBSession.query(Thing).filter_by(filterby).all()

谢谢!

最佳答案

答案1:当您给出任何语法时,它到底会返回什么,您可以检查该语法的类型,例如

当你写的时候

In [5]: Thing.amount.desc()
Out[5]: <sqlalchemy.sql.expression._UnaryExpression object at 0x199a5d0>

它将创建一个表达式类型的对象。_UnaryExpression。因此,当我们需要一元运算时,可以将这个表达式提供给 sqlalchemy。现在当你打印它时 在[6]中:a = Thing.amount.desc()

In [7]: print a
thing.amount DESC

因此,当查询运行时,它将在 thing.amount DESC 中进行转换。因此,当您创建表达式时,它不会调用任何东西,它只会创建查询结构。

答案:2当您创建查询时,它将创建所需的对象。对于过滤器和排序依据,它需要表达式,因此如果您直接传递给 order_byfilter 那么它将在内部创建相同的对象。所以你可以同时使用这两种方式。

答案:3

In [8]: Thing.amount == 5
Out[8]: <sqlalchemy.sql.expression._BinaryExpression object at 0x1a1dbd0>

这也是一个表达式,因此您可以将表达式赋予 filter_by .

您将对expression有更多了解来自 sqlalchemy 网站。

关于python - 了解 SQLAlchemy 中的中间 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7719923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com