Python SQLAlchemy反射:如何从特定列查询数据?
使用SQLAlchemy反射,如何查询特定列中的数据Python SQLAlchemy反射:如何从特定列查询数据?,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,使用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,
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表中所有列中的所有数据。然而,我想要的是从列中获取特定数据。例如,我想检索用户名和密码列,但语法不正确。以下是我目前的情况:
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)
这将使:
1 pass1 userone
2 pass2 usertwo
但正如你所看到的,那是在我把所有的专栏都拿回来之后。我想要的是只从我需要的列中获取数据。例如,Members表有10列。为了提高效率,我只需要从其中两个表中获取数据。只需指定要选择的列[
session.query(testtable.c.password,testtable.c.username)
],而不是整个表[session.query(testtable)
]:
那不行。对于session.query(testtable.password,testtable.username)中的数据,它失败,错误为
。筛选依据(is\u active=1,is\u deleted=0):AttributeError:'Table'对象没有属性“password”
请记住我在使用反射,所以我没有创建“列”我自己在python中更新了答案-需要使用testtable.c.column1
而不是testtable.column1
。尝试了你的建议,但现在它抛出了一个不同的错误:文件/usr/local/lib/python3.2/dist包/SQLAlchemy-0.8.0b2-py3.2.egg/SQLAlchemy/inspection.py”,第74行,在inspect type(检查类型)中sqlalchemy.exc.noInspection available(检查可用):对于类型为
tryfilter
的对象,没有可用的检查系统,而不是使用符合条件的列名:qry=session.query(testtable.c.password,testtable.c.username)。筛选器(testtable.c.is\u活动==1,testtable.c.is\u删除==0)
它终于起作用了。谢谢两件事。第一,为什么在使用“filter_by”时会出现非类型
错误?第二,你有没有一个指针指向我在哪里可以得到更好的解释SQLAlchemy反射?因为我怀疑我在这里问的是关于sqlalchemy的文档页面,如果是的话,就不是那么直截了当了。
1 pass1 userone
2 pass2 usertwo
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!")