【发布时间】:2021-10-28 08:52:02
【问题描述】:
engine = db_connect()
create_table(engine)
Session = sessionmaker(bind=engine)
self.session = Session()
settings = get_project_settings()
stock_engine = create_engine(settings.get('STOCK_DATABASE_URI'), echo=True,pool_recycle=1800)
StockSession = sessionmaker(bind=stock_engine)
self.stock_session = StockSession()
def process_item(self, item, spider):
sleep(0.3)
item_table.uni_identifier = item['uni_identifier']
symbols = self.stock_session.execute("SELECT * from table3")
for row in symbols:
stock_table = Trial_table()
stock_table.stock_symbol = row["symbol"]
stock_table.company_name = row["companyName"]
stock_table.last_updated = arrow.utcnow().to('local').format('YYYY-MM-DD HH:mm:ss')
self.session.add(stock_table)
try:
self.session.commit()
except:
self.session.rollback()
raise
self.session.add(item_table)
try:
self.session.commit()
except:
self.session.rollback()
raise
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1062, "键 'trial_table.stock_symbol_UNIQUE' 的重复条目 'GNLN'")
以上错误是在 session.add(stock_table) 中生成的。我想要实现的是如果 session.add(stock_table) 生成了重复键错误,我想更新而不是插入。我怎样才能做到这一点?已经尝试使用 self.session.merge(stock_table)。它不工作。 Trial_table() 是数据库中各个表的 ORM。
【问题讨论】:
标签: python-3.x sqlalchemy