【发布时间】:2013-03-06 16:21:55
【问题描述】:
使用 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 表中所有列中的所有数据。但是,我想要的是从列中获取特定数据。例如。我想检索 username 和 password 列,但我无法正确获取语法。以下是我目前所拥有的:
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
但是正如你所看到的,那是在我把所有的列都拿回来之后。我想要的是只从我需要的列中获取数据。例如。成员表有 10 列。为了提高效率,我只需要从其中两个中获取数据。
【问题讨论】:
标签: python mysql sqlalchemy