Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 理解插入,关于SQLAlchemy中的冲突(upsert)_Python_Python 3.x_Postgresql_Sqlalchemy - Fatal编程技术网

Python 理解插入,关于SQLAlchemy中的冲突(upsert)

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

我试图理解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(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)