Câu trả lời được cập nhật cho SQLAlchemy 1.4:
Phiên bản 1.4 đã ngừng sử dụng engine.execute()
cũ và thay đổi cách .execute()
hoạt động trong nội bộ. .execute()
bây giờ trả về một CursorResult
đối tượng có .mappings () phương pháp:
import sqlalchemy as sa
# …
with engine.begin() as conn:
qry = sa.text("SELECT FirstName, LastName FROM clients WHERE ID < 3")
resultset = conn.execute(qry)
results_as_dict = resultset.mappings().all()
pprint(results_as_dict)
"""
[{'FirstName': 'Gord', 'LastName': 'Thompson'},
{'FirstName': 'Bob', 'LastName': 'Loblaw'}]
"""
(Câu trả lời trước cho SQLAlchemy 1.3)
SQLAlchemy đã thực hiện việc này cho bạn nếu bạn sử dụng engine.execute
thay vì raw_connection()
. Với engine.execute
, fetchone
sẽ trả về một Row
của SQLAlchemy đối tượng và fetchall
sẽ trả về một list
của Row
các đối tượng. Row
các đối tượng có thể được truy cập bằng khóa, giống như dict
:
sql = "SELECT FirstName, LastName FROM clients WHERE ID = 1"
result = engine.execute(sql).fetchone()
print(type(result)) # <class 'sqlalchemy.engine.result.Row'>
print(result['FirstName']) # Gord
Nếu bạn cần một dict
đúng thì bạn chỉ có thể chuyển đổi nó:
my_dict = dict(result)
print(my_dict) # {'FirstName': 'Gord', 'LastName': 'Thompson'}