MySQL和Python:避免MySQL选项卡中的重复条目

2024-06-15 19:38:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python脚本,它从一个名为octopart的网站访问数据,并将数据插入MySQL表。最终目标是:

  1. 脚本每天运行一到两次,并使用自定义API查询octopart
  2. 从octopart收集数据,并使用json将其解析为有用的格式
  3. 从数据中选择的头和值被插入到MySQL表中
  4. (当脚本继续运行时)脚本更新表中某些与octopart中的新条目不相等的条目,而不会出现重复条目sql错误。你知道吗

我已经包括了下面应该执行的代码(4.)。我仍然得到一个1062重复输入错误。有什么建议吗?你知道吗

变量:

  • mylisth:从octopart数据中提取的标题列表
  • mylistv:对应于每个标题的值的列表
  • value['display\u value']:为每个数据块添加到mylistv的下一个值

    heads = ','.join(str(i) for i in mylisth)
    
    #create string input of %s corresponding to number of entries in mylisth
    placelst = ['%s' for i in mylisth]
    placestr = ','.join(str(i) for i in placelst)
    
    #add_capacitor -> SQL query line // data_capacitor -> values to be inserted using query line
    duplicate_check = ("SELECT * FROM capacitors")    
    add_capacitor = ("INSERT INTO capacitors ("+heads+") VALUES ("+placestr+")")
    replace_capacitor = ("REPLACE INTO capacitors ("+heads+") VALUES ("+placestr+")")
    data_capacitor = mylistv
    
    cursor.execute(duplicate_check)
    rows = cursor.fetchall()
    for row in rows:
        for col in row:
            if col == value['display_value']: 
                cursor.execute(replace_capacitor, data_capacitor)
            else:
                cursor.execute(add_capacitor, data_capacitor)
    emp_no = cursor.lastrowid
    
    cnx.commit()
    time.sleep(1)
    

Tags: 数据in脚本addfordatavalue条目
1条回答
网友
1楼 · 发布于 2024-06-15 19:38:07

也许您应该使用^{}。然后,您不必选择并重新处理表中的每一行,只需通过一次对^{}的调用插入该数据,并让MySQL引擎在出现重复键时处理更新:

heads = ','.join(str(i) for i in mylisth)
placelst = ['%s' for i in mylisth]
placestr = ','.join(str(i) for i in placelst)

replacestr = ', '.join(['{}=%s'.format(h) for h in mylisth])
sql = """INSERT INTO capacitors ({heads}) VALUES ({placestr})
         ON DUPLICATE KEY UPDATE {replacestr}""".format(
         heads=heads, placestr=placestr,
         replacestr=replacestr)

for data_capacitor in larger_loop:
    args = data_capacitor*2
    cursor.execute(sql, args)

相关问题 更多 >