반응형
실행 수를 많이 사용하여 파이썬의 사전 목록을 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
반응형
'programing' 카테고리의 다른 글
| 정수 배열에서 고유 난수 생성 (0) | 2023.10.29 |
|---|---|
| a=a++의 의미론을 정의하지 못하게 하는 이유는 무엇입니까? (0) | 2023.10.29 |
| 쿼리 결과에 따라 간격을 두고 날짜를 "스텝"하거나 "스킵"할 수 있는 기능을 갖춘 Mysql 쿼리 (0) | 2023.10.29 |
| AF_의 차이점은 무엇입니까?INET 및 PF_INET 상수? (0) | 2023.10.29 |
| JS 객체의 타입을 확인하는 가장 정확한 방법은? (0) | 2023.10.29 |