SQLAlchemy反射:如何从特定列查询数据?

2024-09-27 07:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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()

上面的查询提供了members表中所有列中的所有数据。不过,我想要的是从列中获取特定的数据。E、 g.我想检索用户名密码列,但是我无法正确地获得语法。以下是我目前所掌握的情况:

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

但正如你所见,那是在我把所有的专栏都找回来之后。我只想从我需要的列中获取数据。E、 成员表有10列。为了提高效率,我只需要从其中两个获取数据。


Tags: innonefordatabyissessionfilter

热门问题