2013-09-05 2 views
1

Я использую Python 2.7 для извлечения информации из веб-страниц (с BeautifulSoup), сортировки этой информации и вставки ее в таблицу SQL (с MySQLdb). Это довольно просто, и мне удалось найти отличную ссылку из других мест на SO.Обновление таблицы SQL с помощью Python 2.7?

Моя проблема: мне нужен код для поиска в таблице, и если информация уже существует, обновите ее. Но если информация не существует, создайте новую запись.

Пример:

Table 
+-----------+----------+--------+ 
| Name | Phone | Date | 
+-----------+----------+--------+ 
| John | 344-7989 | 9/1 | 
+-----------+----------+--------+ 
| Alexander | 198-3333 | 8/16 | 
+-----------+----------+--------+ 

Веб-обходчик находит новую информацию в Интернете и сохраняет его в список словарей:

[ 
    { 
    "Name" : "Samantha", 
    "Phone" : "788-3443", 
    "Date" : "9/5" 
    }, { 
    "Name" : "John", 
    "Phone" : "222-9009", 
    "Date" : "9/5" 
    } 
] 

Теперь одна запись (Саманта) является совершенно новым, не существуют в таблице. Но другая запись (Джон) уже существует, но его информация более поздняя. Что такое код для редактирования таблицы с этой информацией и создания:

Final Table 
+-----------+----------+--------+ 
| Name | Phone | Date | 
+-----------+----------+--------+ 
| John | 222-9009 | 9/5 | 
+-----------+----------+--------+ 
| Alexander | 198-3333 | 8/16 | 
+-----------+----------+--------+ 
| Samantha | 788-3443 | 9/5 | 
+-----------+----------+--------+ 
+0

Что вы хотите, код MySQL или код Python? – Miquel

+0

Я верю в код MySQL. Насколько я понимаю, вы просто поместили код MySQL в '(MySQLdb.connect) .cursor()'. Если бы кто-то мог дать мне рабочий пример с кодом SQL и ** Python, это было бы здорово. –

+0

Но можете ли вы дублировать имена в своем списке, например, два Джона? Если да, то как вы определяете регистр для обновления? – Miquel

ответ

1

В this link есть очень хороший ответ на аналогичный вопрос.

Адаптирование его в контексте, это может быть пример кода:

CREATE TABLE Users (`name` varchar(35) unique, `phone` varchar(10), `date` date); 

И идея для кода Python (с использованием MySQLdb):

... 
cursor = connection.cursor() 
cursor.execute(""" 
    INSERT INTO Users (name, phone, date) 
    VALUES (%s,%s,%s) 
    ON DUPLICATE KEY UPDATE phone = %s, date=%s; 
    """,(name,phone,date,phone,date)) 
cursor.close()