gpt4 book ai didi

python - SQLAlchemy 返回元组而不是字典

转载 作者:太空狗 更新时间:2023-10-29 19:30:18 26 4
gpt4 key购买 nike

我已经将 SQLAlchemy 更新到 0.6,但它破坏了一切。我注意到它返回的元组不再是字典。这是一个示例查询:

query = session.query(User.id, User.username, User.email).filter(and_(User.id == id, User.username == username)).limit(1)
result = session.execute(query).fetchone()

这段代码用于在 0.5 中返回一个字典。

我的问题是如何返回字典?

最佳答案

session.execute 从未返回字典,它返回一个 RowProxy 对象,可以索引字典,使用用于位置查找的整数键、用于基于标签的查找的字符串键或 Column 对象查找该列的值。这里的问题是 session.execute(query) 没有按照您预期的方式执行。它将 Query 对象转换为 Select 语句,执行它并直接返回结果。结果集对 ORM 级别的功能一无所知。 0.5 和 0.6 之间的变化是 ORM 使用不同的算法来标记查询中的列,它现在将表名添加到标签中。因此,当以前 row['id'] 碰巧起作用时,现在 row['users_id'] 起作用了。在这两种情况下,row[User.__table__.columns['id']] 都有效。

要执行 ORM 查询,您实际上应该使用 .all().first().one() 方法或迭代在它上面或使用数字索引。查询返回命名元组对象。如果你想要一个字典,用它的键压缩元组:

row = session.query(User.id, User.username, User.email)\
.filter(and_(User.id == id, User.username == username)).first()
print("id=%s username=%s email=%s" % row) # positional
print(row.id, row.username) # by label
print(dict(zip(row.keys(), row))) # as a dict

关于python - SQLAlchemy 返回元组而不是字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com