Python 理解插入,关于SQLAlchemy中的冲突(upsert)
我试图理解SQLAlchemy的Python 理解插入,关于SQLAlchemy中的冲突(upsert),python,python-3.x,postgresql,sqlalchemy,Python,Python 3.x,Postgresql,Sqlalchemy,我试图理解SQLAlchemy的on\u conflict\u do\u update方法中的set是什么意思。我有下表: Table( "test", metadata, Column("id", Integer, primary_key=True), Column("firstname", String(100)), Column("lastname", String(10
on\u conflict\u do\u update
方法中的set
是什么意思。我有下表:
Table(
"test",
metadata,
Column("id", Integer, primary_key=True),
Column("firstname", String(100)),
Column("lastname", String(100)),
)
以及插入类似的内容(如果我用psql编写的话)
我做了一些尽职调查,看到人们在集合中这样写道:
import sqlalchemy.dialects import postgresql
insert_stmt = postgresql.insert(target).values([{'id':1,'firstname':'John','lastname':'Doe'}])
primary_keys = [key.name for key in inspect(target).primary_key]
update_dict = {c.name: c for c in insert_stmt.excluded if not c.primary_key}
stmt = insert_stmt.on_conflict_do_update(index_elements = primary_keys , set_ = update_dict)
engine.execute(stmt)
update\u dict
是否只是查看我在insert\u stmt
中设置的排除值(我要更新的值)?如果我str(update_dict
),我会得到一个关于列{'firstname':column('firstname',VARCHAR(length=100),table=),'lastname':column('lastname',VARCHAR(length=100),table=)}
,上面的方法是检索数据的唯一方法吗?你能手工写出来吗
import sqlalchemy.dialects import postgresql
insert_stmt = postgresql.insert(target).values([{'id':1,'firstname':'John','lastname':'Doe'}])
primary_keys = [key.name for key in inspect(target).primary_key]
update_dict = {c.name: c for c in insert_stmt.excluded if not c.primary_key}
stmt = insert_stmt.on_conflict_do_update(index_elements = primary_keys , set_ = update_dict)
engine.execute(stmt)