Python sqlalchemy返回元组列表,而不仅仅是一个简单的“值”;选择…where";查询

Python sqlalchemy返回元组列表,而不仅仅是一个简单的“值”;选择…where";查询,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我通过使用PHP了解一些SQL,但我在SQL炼金术上遇到了麻烦。 我的第一个问题是: engine.table_names() from sqlalchemy import select, Table, Column, String,\ MetaData sql = "select id from user where email = 'omg@gmail.com'" conn=engine.connect() res_proxy = conn.execute(sq

我通过使用PHP了解一些SQL,但我在SQL炼金术上遇到了麻烦。 我的第一个问题是:

engine.table_names()

from sqlalchemy import select, Table, Column, String,\
    MetaData
sql = "select id from user where email = 'omg@gmail.com'"
conn=engine.connect()
res_proxy = conn.execute(sql)
res = res_proxy.fetchall()
user_id = res[0][0]
print(res[0][0])
row = res[0]
print(row.keys())
print(res)
这个输出

1
['id']
[(1,)]
我的第二个问题

#query meals table and get highest meal number
sql2 = "select meal_id from user_meals where user_id='user_id'"
res_proxy = conn.execute(sql2)
res = res_proxy.fetchall()
print(res)
输出

[]
这是一张空桌子,所以这是正确的。
为什么返回值列表和第一个查询中的元组列表是?

您可以将
列表
视为结果集,
元组
s视为结果集中的行。如果您知道查询只返回一行,则可以通过调用
res\u proxy.fetchone()
直接获取元组。但是SQLAlchemy不会根据返回的记录数来切换响应类型,程序员需要选择他们想要使用的方法。相关的(也请参见注释中的链接)您可以将
列表
视为结果集,而
元组
将作为结果集中的行。如果知道查询只返回一行,则可以通过调用
res\u proxy.fetchone()
直接获取元组。但是SQLAlchemy不会根据返回的记录数来切换响应的类型,程序员需要选择他们想要使用的方法.Related(另请参见注释中的链接)