【问题标题】:SQLAlchemy session.add() doesn't updateSQLAlchemy session.add() 不更新
【发布时间】:2018-04-08 12:52:03
【问题描述】:
def update_user(user):
session.close()

get_user = session.query(User).filter(User.uniq_id == user.uniq_id).first()
print(get_user.state)  # 0
get_user.__dict__.update(user.__dict__)
print(get_user.state)  # 2

try:
    session.add(get_user)
    session.commit()
    return True, "complete"
except Exception as exc:
    session.rollback()
    exc_type, exc_obj, exc_tb = sys.exc_info()
    file_name = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print(str(exc_type) + str(file_name) + str(exc_tb.tb_lineno) + "\n" + str(exc))
    return False, str(str(exc_type) + str(file_name) + str(exc_tb.tb_lineno) + "\n" + str(exc))
pass

该函数获取一个包含表格单元格的类(我需要使用另一个类来使用用户数据) 在数据库中的 session.add(get_user) 和 session.commit() 值没有更新之后

get_user.__dict__.update(user.__dict__)可能有问题

但我没有替代解决方案

如果我使用session.add(User(**user.__dict__)),我得到一个错误: (psycopg2.IntegrityError) duplicate key value violates unique constraint "users_pkey"

【问题讨论】:

  • Session.add() 用于向会话添加新的(临时)对象。 get_user 是持久的并且已经在会话中。 get_user.__dict__.update(user.__dict__) 确实有问题。您已经明确规避了由描述符处理的 ORM 检测。

标签: python sqlalchemy


【解决方案1】:
session.query(User).filter(User.uniq_id == user.uniq_id).update(user.__dict__)

我需要使用 session.query 的更新

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2021-04-14
    • 2015-09-13
    • 1970-01-01
    • 2021-11-16
    • 2017-11-25
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多