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テーブルのすべての列のすべてのデータを提供します。ただし、必要なのは、列から特定のデータを取得することです。たとえば、ユーザー名とパスワードの列を取得したいのですが、構文を正しく取得できません。以下は私がこれまでに持っているものです:
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個の列があります。効率を上げるために、そのうちの2つからデータを取得するだけで済みます。