问题描述
我想将多个项目插入到一个表中,并在发生冲突时向上插入该表。这就是我想出的以下内容
<CardContainer>
{Object.keys(ClientPdfs).map((ageName,i) => (
<Card
onClick={() => setGenreObject(ClientPdfs[ageName])}
key={i}>
<CategoryContainer>
<Overlay />
<CategoryPhoto src={ClientPdfs[ageName].image} alt="ages"/>
<CategoryName>
{ClientPdfs[ageName].name}
</CategoryName>
</CategoryContainer>
</Card>
))}
</CardContainer>
from sqlalchemy.dialects.postgresql import insert
Meta = MetaData()
jobs_table = Table('jobs',Meta,autoload=True,autoload_with=engine)
stmt = insert(jobs_table).values(jobs)
stmt.on_conflict_do_update(
index_elements=['j_id'],set_= dict(active=True)
)
result = engine.execute(stmt)
return result.is_insert
是一个唯一字段,如果该行已存在,我将尝试更新该行。如果该行已存在,我会收到以下错误。
j_id
这里有我遗漏的东西吗?
解决方法
stmt.on_conflict_do_update
返回一条新语句。如果您更改为以下内容,它应该可以工作:
from sqlalchemy.dialects.postgresql import insert
meta = MetaData()
jobs_table = Table('jobs',meta,autoload=True,autoload_with=engine)
stmt = insert(jobs_table).values(jobs)
stmt = stmt.on_conflict_do_update(index_elements=['j_id'],set_= dict(active=True))
result = engine.execute(stmt)
return result.is_insert
您可以通过 print(stmt)
语句查看生成的 SQL 查询。这对于查看您要执行的语句是否具有预期的表达式很有用。此外,将 echo=True
添加到 create_engine
有助于检测问题!