短版本:我正在尝试在mysql表中增加一个变量ON DUPLICATE。相反,它只会添加新记录。旧记录保持不变,而不是将sale_date递增1。由于这个脚本每天运行,我试图在昨天(T-1)到今天的shipment_date(T)的重复记录中设置mysql数据库中的sale_date。有什么想法吗?谢谢!
shipment_date = d.date.today().strftime('%Y-%m-%d')
for index, row in df_main_sql.iterrows():
try:
command = "INSERT INTO **** (stock_number, sale_date, shipment_date) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE sale_date = shipment_date"
cursor.execute(command, (row['stock_number'], row['sale_date'], row['shipment_date']))
connection.commit()
time.sleep(0.1)
except:
continue
cursor.close()
其他详细信息:我有一个运行正常的脚本,但有一个例外。我正在尝试将一个pandas数据帧写入mysql。我为一家公司运行这个库存软件,但根据我们在供应链中的位置,我的数据不完整。数据基本上包含stock_number,shipment_date和sale_date。我不知道销售日期,但我可以推断,当一个新的stock_number发生时,它是一个新的货物,当该stock_number不再发生时,销售已经发生,所以我需要该程序每天增加sale_date记录发生,然后在它停止发生时什么也不做。这将告诉我新货物何时到达以及何时售出。您必须与现有数据库进行比较,因为当脚本每天运行时,您无需知道前一天哪些stock_numbers不存在。
第1天的数据库示例
stock_number sale_date shipment_date
1234a 06/06/17 06/06/17
1235a 06/06/17 06/06/17
1236a 06/06/17 06/06/17
第2天的数据库示例,包含当前脚本,一条新记录,没有销售
stock_number sale_date shipment_date
1234a 06/06/17 06/06/17
1235a 06/06/17 06/06/17
1236a 06/06/17 06/06/17
1237a 06/07/17 06/07/17
如果没有销售
,第2天会发生什么stock_number sale_date shipment_date
1234a 06/07/17 06/06/17
1235a 06/07/17 06/06/17
1236a 06/07/17 06/06/17
1237a 06/07/17 06/07/17
第1天df_main_sql的内容
stock_number sale_date shipment_date
1234a 06/06/17 06/06/17
1235a 06/06/17 06/06/17
1236a 06/06/17 06/06/17
第2天df_main_sql的内容
1234a 06/07/17 06/07/17
1235a 06/07/17 06/07/17
1236a 06/07/17 06/07/17
1237a 06/07/17 06/07/17
答案 0 :(得分:0)
您没有正确地将数据传递给SQL。
...ON DUPLICATE KEY UPDATE sale_date = shipment_date"
应该是,
...ON DUPLICATE KEY UPDATE sale_date = %s"
cursor.execute(command, (row['stock_number'], row['sale_date'], row['shipment_date'], shipment_date))
有帮助吗?