使用 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)
"""
我似乎找不到使用 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)
"""