【发布时间】:2021-02-05 08:58:18
【问题描述】:
当我对表有一些唯一约束时,如何使用 sqlalchemy 的类 Session() 进行更新插入? 我在 pyarchinit_dbmanager.py 中有这个功能:
def insert_data_session(self, data):
Session = sessionmaker(bind=self.engine, autoflush=False)
session = Session()
session.add(data)
session.commit()
session.close()
还有pyarchinit_Config.py中的代码:
if mapper_class_write == 'PYUS' :
for sing_rec in range(len(data_list_toimp)):
try:
data = self.DB_MANAGER_write.insert_pyus(
self.DB_MANAGER_write.max_num_id(mapper_class_write,
id_table_class_mapper_conv_dict[mapper_class_write]) + 1,
data_list_toimp[sing_rec].area_s,
data_list_toimp[sing_rec].scavo_s,
data_list_toimp[sing_rec].us_s,
data_list_toimp[sing_rec].stratigraph_index_us,
data_list_toimp[sing_rec].tipo_us_s,
data_list_toimp[sing_rec].rilievo_originale,
data_list_toimp[sing_rec].disegnatore,
data_list_toimp[sing_rec].data,
data_list_toimp[sing_rec].tipo_doc,
data_list_toimp[sing_rec].nome_doc,
data_list_toimp[sing_rec].coord,
data_list_toimp[sing_rec].the_geom)
self.DB_MANAGER_write.insert_data_session(data)
value = (float(sing_rec)/float(len(data_list_toimp)))*100
self.progress_bar.setValue(value)
QApplication.processEvents()
except Exception as e :
QMessageBox.warning(self, "Errore", "Error ! \n"+ str(e), QMessageBox.Ok)
return 0
area_s、scavo_s 和 us_s 是唯一约束。
因此,如果我想在没有冲突的情况下导入数据,那没关系,但如果我想忽略重复数据而只插入新数据,我会遇到唯一约束的问题。
【问题讨论】:
标签: python-3.x postgresql sqlite sqlalchemy upsert