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

SQLAlchemy反思:如何查询特定列中的数据?

颛孙玉石
2023-03-14
问题内容

使用SQLAlchemy反射,如何查询特定列中的数据

testtable = Table('member', Metadata, autoload=True)

def TestConnection():
    data = None
    loopCounter = 0 
    for data in session.query(testtable).filter_by(is_active=1, is_deleted=0): 
        print(loopCounter + 1, data)
        loopCounter += 1
    if data is None:
        raise Exception ("Could not find any data that matches your query")        
    else:
        print("It worked!")

TestConnection()

上面的查询为我提供了 member 表中所有列中的所有数据。但是我想要从列中获取特定数据。例如,我想检索 用户名密码
列,但是语法不正确。以下是我到目前为止的内容:

def TestConnection():
    loopCounter = 0 
    for password, username in session.query(testtable).filter_by(is_active=1, is_deleted=0):
        print(loopCounter + 1, data)
        loopCounter += 1
    if data is None:
        raise Exception ("Could not find any data that matches your query")        
    else:
        print("It worked!")

失败并显示以下错误:

Traceback (most recent call last):
File "/home/workspace/upark/src/monitor.py", line 36, in <module>
TestConnection()
File "/home/workspace/upark/src/monitor.py", line 26, in TestConnection
for password, username in session.query(testtable).filter_by(is_active=1, is_deleted=0):
ValueError: too many values to unpack (expected 2)

正在使用来自Oracle的Python3.2,SQLAchemy0.8和mysqlconnector。

编辑:一些轻微的进步

刚刚发现,在返回所有结果之后,我可以“过滤”列,如下所示:

def TestConnection():
    data = None
    loopCounter = 0 
    for data in session.query(testtable).filter_by(is_active=1, is_deleted=0): 
        print(loopCounter + 1, data.password, data.username)
        loopCounter += 1
    if data is None:
        raise Exception ("Could not find any data that matches your query")        
    else:
        print("It worked!")

这将给:

1 pass1 userone
2 pass2 usertwo

但是正如您所看到的,那是在我把所有专栏都整理好之后。我想要的是仅从我需要的列中获取数据。例如,Members表有10列。我只需要从其中两个中获取数据即可提高效率。


问题答案:

只需指定要选择[ session.query(testtable.c.password, testtable.c.username)]的列,而不要选择整个表[ session.query(testtable)]:

def TestConnection():
    data = None
    loopCounter = 0 
    for data in session.query(testtable.c.password, testtable.c.username).filter_by(is_active=1, is_deleted=0): 
        pwd, usr = data
        print(loopCounter + 1, pwd, usr)
        loopCounter += 1
    if data is None:
        raise Exception ("Could not find any data that matches your query")        
    else:
        print("It worked!")


 类似资料:
  • 问题内容: 我出于性能原因使用此sql 但是我有一个例外 有什么解决方法可以让我将列表绑定到’in’子句的参数? 问题答案: 对旧问题的新答案,因为自从首次发布此问题/接受的答案以来,似乎某些基本功能已发生更改(如@vicvicvic在@Gary的答案中所暗示的,但我认为它应该是提高可见度的答案) 。 现在支持类型修改,类型修改除了其他功能外,还允许将列表传递到查询中的单个参数化值中。这也可以在S

  • 我正在使用Spring数据jpa来创建服务。使用我从多个表中提取记录。我在模型类中使用了映射。模型类与和进行映射。相符。 我只想从建筑中选择建筑名称。 谁能告诉我怎么办? 查询DSL 结果

  • 问题内容: 查询条件应支持布尔运算符和正则表达式。我已经读过关于Booleano的文章,但是它不支持正则表达式。 如果没有满足此要求的东西,那将是开始构建的最佳技术? 以下示例中的语法只是一个示例,但是它提供的功能应该存在。 等于 适用于以下清单 问题答案: 我设法使用pyparsing模块解决了这个问题。 为了避免发生冲突,我必须用<>替换regexp(),但是目前所有这些似乎都是最好的解决方案

  • 我对工具包的结果计数有这样的输出格式: 我实现了一个循环来查询工具包,然后检查结果值中的相关性,如下所示: 不幸的是,这个解决方案非常缓慢。你对如何做到这一点有什么建议吗?多谢了。 编辑:因为项目太多,所以很慢。

  • 问题内容: 我用来从表中获取数据。现在,从称为的表中获取所有记录正在按预期方式工作。 现在,我希望对多个列执行查询,如下所示: 但这给LIKE带来了错误。我怎样才能做到这一点? 问题答案: 请像运营商一样使用 http://docs.sqlalchemy.org/en/rel_0_9/core/sqlelement.html#sqlalchemy.sql.operators.ColumnOpera

  • 问题内容: 首先导入k和模块: 声明和对象: 有三个表:和。该Artist对象可以链接到多个。并且该Album对象可以链接到多个对象。的是保持之间的关系和紧密的: 所以我们有Artist链接到Album这是与Genre它看起来像这样:。 完成此设置后,我们Genre首先创建对象: 然后是两张专辑: 和艺术家: 创建数据库后,我们可以查询Albums链接到的内容Genre: 以及Artists链接到