当前位置: 首页 > 面试题库 >

SQLAlchemy Core查询中的动态限制

柳志专
2023-03-14
问题内容

我想编写一个查询,在其中我可以动态地将各种限制传递给SQLA Core。例如,我希望能够在SELECT查询中WHERE color = 'blue'指定或不动态指定。通过{'color': 'blue'}限制指令可能会很好,或者可能会有更标准的方法。

我已经阅读了教程和API文档,但我想知道:

对于SQLA Core中的动态限制,什么是惯用合同,它将如何实施?


问题答案:

您可以毫无问题地动态构建查询。例如,您可以执行以下操作:

query = select([table])
for key, value in params.iteritems():
    query = query.where(table.columns[key] == value)

print conn.execute(query).fetchall()

那里params只是限制的字典,如{'column': 'value'}。这将产生一个查询,其中所有 where
子句都与AND链接在一起。当然,如果您需要更复杂的 where 子句,则查询的构造可能会更加困难。

一个工作示例:

from sqlalchemy import select
from sqlalchemy import create_engine
from sqlalchemy import Column, String, Integer
from sqlalchemy.schema import MetaData, Table

# create engine and connection
DB_URI = "mysql+mysqldb://username:password@127.0.0.1:3306/database?charset=utf8mb4"
engine = create_engine(DB_URI, convert_unicode=True, echo=False)
conn = engine.connect()

# create table
metadata = MetaData()
pieces_table = Table('pieces', metadata,
    Column('id', Integer, primary_key=True),
    Column('size', String(60)),
    Column('color', String(60)),
)
metadata.create_all(engine)

# insert data
conn.execute(pieces_table.insert(), [
    {'size': 'small', 'color': 'blue'},
    {'size': 'large', 'color': 'blue'},
    {'size': 'small', 'color': 'red'},
])

# query data

def build_query(table, params):
    query = select([table])
    for key, value in params.iteritems():
        query = query.where(table.columns[key] == value)
    return query

params = {
    'size': 'large',
    'color': 'blue',
}
query = build_query(pieces_table, params)
print conn.execute(query).fetchall()


 类似资料:
  • 问题内容: 我想使用Django REST Framework,限制可以在创作的相关字段中使用的值。 例如,考虑以下示例(基于http://django-rest-framework.org/api- guide/filtering.html 上的过滤示例,但已更改为ListCreateAPIView): 在此示例中,如何确保购买者在创建时只能等于self.request.user,并且这是可浏览

  • 我有一个这样的SQL问题 根据用户输入,我想将botcode='r1'更改为给定输入。在不重新启动作业的情况下说出botcode='r10'。有没有办法做到这一点。我在flink 1.7上使用stream env。我尝试配置流来读取输入。但仍停留在如何动态更改查询上。有人能帮我吗?提前谢谢

  • 我试图从动态表中选择对象,但当我运行我的代码时,我得到了一些错误...有一种方法可以做到这一点...我用的是JPAHibernate和后遗症 这里是错误。。。 org.springframework.dao.InvalidDataAccessResourceUsageExc0019,"dedegMessage":"org.springframework.dao.InvalidDataAccessR

  • 问题内容: 我正在寻找一种使用Spring Data JPA动态构建查询的解决方案。我有一个GameController,它有一个RESTful服务终结点/ games,它带有4个可选参数:体裁,平台,年份,标题。可能不传递任何API,而是传递所有4种,以及之间的每种组合。如果未传递任何参数,则默认为null。我需要在存储库中使用一种方法来构建适当的查询,并且理想情况下还允许Spring Data

  • 问题内容: 我正在与后端的Mongodb一起开发nodejs / express应用程序。在我的一个API调用中,根据是否存在特定的querystring参数,我想使用$ gt或$ lt向Mongodb发出查询。 在某些情况下,我们想要的所有内容都比使用$ lt少,但在其他情况下,我们希望所有的内容都比使用$ lt大。我们如何做到这一点而不重复查询? 这是一个示例查询: 有没有一种方法可以动态创建

  • 问题内容: 我们正在使用Postgres / PostGis连接来获取通过地理服务器发布的数据。 目前查询看起来像这样: 在我们的数据库中,仅将有效的shapefile导入每个表中,因此使UNION ALL零件动态化(遍历每个表并执行UNION ALL语句)是有意义的。有没有一种方法可以以标准的Postgres方式执行?还是我需要编写一个函数,语法看起来如何?我对SQL很陌生。 shapefile