programing

실행 수를 많이 사용하여 파이썬의 사전 목록을 MySQL에 삽입하려면 어떻게 해야 합니까?

iphone6s 2023. 10. 29. 19:06
반응형

실행 수를 많이 사용하여 파이썬의 사전 목록을 MySQL에 삽입하려면 어떻게 해야 합니까?

저는 현재 MySQL과 Python을 사용하여 웹에서 데이터를 긁어내고 있습니다.구체적으로는 테이블 데이터를 스크랩하여 데이터베이스에 삽입하고 있습니다.현재 사용 중인 솔루션은 효과가 있지만 매우 비효율적이며 코드를 다시 작성하지 않으면 데이터베이스가 잠길 가능성이 높습니다.제가 현재 사용하고 있는 것(부분 코드)은 다음과 같습니다.

itemBank = []
for row in rows:
    itemBank.append((tempRow2,tempRow1,tempRow3,tempRow4)) #append data

#itemBank List of dictionaries representing data from each 
row of the table. i.e. 
('Item_Name':"Tomatoes",'Item_Price':"10",'Item_In_Stock':"10",'Item_Max':"30")

for item in itemBank:
    tempDict1 = item[0]
    tempDict2 = item[1]
    tempDict3 = item[2]
    tempDict4 = item[3]

    q = """ INSERT IGNORE INTO
         TABLE1   
        (
           Item_Name,
           Item_Price,
           Item_In_Stock,
           Item_Max,
           Observation_Date
         ) VALUES (
           "{0}",
           "{1}",
           "{2}",
           "{3}",
           "{4}"
           )
        """.format(tempDict1['Item_Name'],tempDict2['Item_Price'],tempDict3['Item_In_Stock'],
                   tempDict4['Item_Max'],getTimeExtra)

    try:
        x.execute(q)
        conn.commit()
    except:
        conn.rollback()

테이블의 각 행을 실행하는 것은 번거롭습니다.사용해 보았습니다.executemany, 하지만 사전의 가치를 올바르게 접근할 수 있는 방법을 찾을 수가 없는 것 같습니다.그럼 어떻게 사용하죠?executemany데이터의 구조를 고려할 때 데이터베이스에 삽입하기 위해 여기에?

itemBank = [] 
for row in rows:
    itemBank.append((
        tempRow2['Item_Name'],
        tempRow1['Item_Price'],
        tempRow3['Item_In_Stock'],
        tempRow4['Item_Max'], 
        getTimeExtra
        )) #append data


q = """ insert ignore into TABLE1 (
        Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) 
        values (%s,%s,%s,%s,%s)           
    """

try:
    x.executemany(q, itemBank)
    conn.commit()
except:
    conn.rollback()

도움이 되기를 바랍니다.

아래 쿼리에서 "무시 삽입" 대신 "삽입 또는 업데이트"를 사용해야 하는 모든 사용자는 쿼리를 사용할 수 있습니다.

q = """ INSERT INTO TABLE1 (Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) 
        values (%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE Item_Name = VALUES(Item_Name), 
        Item_Price = VALUES(Item_Price), Item_In_Stock = VALUES(Item_In_Stock), Item_Max = VALUES(Item_Max), 
        Observation_Date = VALUES(Observation_Date)       
    """ 

TABLE1의 기본 키가 Item_Name인 경우 업데이트 시 기본 키를 업데이트할 필요가 없으므로 아래와 같이 업데이트 부분에서 제거합니다.

q = """ INSERT INTO TABLE1 (Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) 
        values (%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE Item_Price = VALUES(Item_Price), Item_In_Stock = VALUES(Item_In_Stock), Item_Max = VALUES(Item_Max), 
        Observation_Date = VALUES(Observation_Date)       
    """  

언급URL : https://stackoverflow.com/questions/18244565/how-can-i-use-executemany-to-insert-into-mysql-a-list-of-dictionaries-in-python

반응형