【问题标题】:Overwrite entire row in Sqlalchemy覆盖 Sqlalchemy 中的整行
【发布时间】:2021-07-26 09:34:45
【问题描述】:

我一直在阅读有关在 sqlalchemy 中执行此操作的方法,似乎有很多 solutions,包括最常见的 .update({...})。但是我不想指定要更新哪些字段,因为我只想覆盖与主键关联的整个行。有什么好的方法可以做到这一点?

我能想到的一种方法是删除匹配的行,然后提交新的行。但是,我不清楚这样做是否有任何奇怪的后果,因为我的主键是 autogen 而不是用户定义的id = Column(Integer, primary_key=True, autoincrement=True)

【问题讨论】:

  • 你的数据是什么格式的?你有Model 的实例吗?你有新值的dict 吗?

标签: python sqlalchemy


【解决方案1】:

我认为您可以创建一个充满空值的字典,然后在添加新值后提交该行:

首先,为表中的每一列创建一个包含空值的字典:

some_table = db.Table('exact_table_name', metadata, autoload=True)
existing_fields = {column: " " for column in some_table.c}

然后添加要更新的值,并创建查询

existing_fields.update(**known_update_dict)
query = some_table.update()
# just adding some where-condition here... 
query = query.where(getattr(some_table.c, "primary_key") == 99)
query.values(**existing_fields)

然后执行。有点令人费解,但我也不知道有更好的方法来做到这一点 - 我认为没有专门的功能或查询词来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2019-01-02
    • 2020-02-16
    • 2010-10-30
    • 1970-01-01
    • 2012-08-31
    • 2020-11-22
    相关资源
    最近更新 更多