使用 sqlalchemy ORM 更新实体

Updating an entity with sqlalchemy ORM

我似乎找不到使用 sqlalchemy ORM 更新数据库中实体的方法

这是我正在做的事情:

 query = Table(self.table_name, self.sql_controller.metadata, autoload=True).select(ItemEntity)
 database_items: List[ItemEntity] = session.execute(query).all()
 database_items[0].Sell_price = 50000

但这会引发异常“AttributeError:无法设置属性”

我在 sqlalchemy 的官方文档中看到了相同的操作 https://docs.sqlalchemy.org/en/14/tutorial/orm_data_manipulation.html#updating-orm-objects

有人能指出我正确的方向吗?在基本的 CRUD 操作上失败真的很烦人。

Table 对象不是 SQLAlchemy ORM 的一部分,它们是 SQLAlchemy Core 的一部分。为了使用 ORM,你需要做这样的事情:

from sqlalchemy import create_engine
from sqlalchemy import select
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session

engine = create_engine("sqlite://", echo=True)

# create test environment
with engine.begin() as conn:
    conn.exec_driver_sql("CREATE TABLE my_thing (id int primary key, sell_price int)")
    conn.exec_driver_sql("INSERT INTO my_thing (id, sell_price) VALUES (1, 123)")

Base = automap_base()


class MyThing(Base):
    __tablename__ = "my_thing"


Base.prepare(autoload_with=engine)

# test
with Session(engine) as sess:
    thing_1 = sess.scalar(select(MyThing).where(MyThing.id == 1))
    thing_1.sell_price = 456
    sess.commit()
""" SQL emitted:
UPDATE my_thing SET sell_price=? WHERE my_thing.id = ?
[generated in 0.00032s] (456, 1)
"""