SQLAlchemy ORM: "AttributeError: Could not locate column in row"
SQLAlchemy ORM: "AttributeError: Could not locate column in row"
我现在正在学习 SQLAlchemy,但是我遇到了一个令我困惑的错误。是的,这里已经有类似的问题,但是 none 似乎已经解决了。
我的目标是使用ORM方式查询数据库。所以我创建了一个模型:
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import Session, registry
from sqlalchemy.sql import select
database_url = "mysql+pymysql://..."
mapper_registry = registry()
Base = mapper_registry.generate_base()
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String(32))
engine = create_engine(database_url, echo=True)
mapper_registry.metadata.create_all(engine)
新 我想为 table 中的所有条目加载整行:
with Session(engine) as session:
for row in session.execute(select(User)):
print(row.name)
#- Error: #
Traceback (most recent call last):
...
print(row.name)
AttributeError: Could not locate column in row for column 'name'
我在这里做错了什么?我不应该能够访问 ORM 模型的字段吗?还是我误解了 ORM 的概念?
我正在使用 Python 3.8 与 PyMySQL 1.0.2 和 SQLAlchemy 1.4.15,服务器运行 MariaDB。
这是我能做到的最简单的例子,我希望任何人都能指出正确的方向。有趣的是,插入新行就像一个魅力。
session.execute(select(User))
将 return 一个包含 Row
个实例(元组)的列表,您需要对其进行解压:
for row in session.execute(select(Object)):
# print(row[0].name) # or
print(row["Object"].name)
但我会直接使用 .query
Object
的 returns 个实例:
for row in session.query(Object):
print(row.name)
我想对上面@Van 所说的内容进行补充。
您也可以使用 session.execute()
获取对象实例。
for row in session.execute(select(User)).scalars().all():
print(row.name)
中提到的
我现在正在学习 SQLAlchemy,但是我遇到了一个令我困惑的错误。是的,这里已经有类似的问题,但是 none 似乎已经解决了。
我的目标是使用ORM方式查询数据库。所以我创建了一个模型:
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import Session, registry
from sqlalchemy.sql import select
database_url = "mysql+pymysql://..."
mapper_registry = registry()
Base = mapper_registry.generate_base()
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String(32))
engine = create_engine(database_url, echo=True)
mapper_registry.metadata.create_all(engine)
新 我想为 table 中的所有条目加载整行:
with Session(engine) as session:
for row in session.execute(select(User)):
print(row.name)
#- Error: #
Traceback (most recent call last):
...
print(row.name)
AttributeError: Could not locate column in row for column 'name'
我在这里做错了什么?我不应该能够访问 ORM 模型的字段吗?还是我误解了 ORM 的概念?
我正在使用 Python 3.8 与 PyMySQL 1.0.2 和 SQLAlchemy 1.4.15,服务器运行 MariaDB。
这是我能做到的最简单的例子,我希望任何人都能指出正确的方向。有趣的是,插入新行就像一个魅力。
session.execute(select(User))
将 return 一个包含 Row
个实例(元组)的列表,您需要对其进行解压:
for row in session.execute(select(Object)):
# print(row[0].name) # or
print(row["Object"].name)
但我会直接使用 .query
Object
的 returns 个实例:
for row in session.query(Object):
print(row.name)
我想对上面@Van 所说的内容进行补充。
您也可以使用 session.execute()
获取对象实例。
for row in session.execute(select(User)).scalars().all():
print(row.name)
中提到的