2016-07-01 4 views
1

У меня есть следующий код:SQL вставить .. где (питон)

def create_table(): 
     c.execute('CREATE TABLE IF NOT EXISTS TEST(SITE TEXT, SPORT TEXT, TOURNAMENT TEXT, TEAM_1 TEXT, TEAM_2 TEXT, DOUBLE_CHANCE_1X TEXT, DOUBLE_CHANCE_X2 TEXT, DOUBLE_CHANCE_12 TEXT, DRAW_1 TEXT, DRAW_2 TEXT DATE_ODDS TEXT, TIME_ODDS TEXT)') 

create_table() 

def data_entry(): 
    c.execute("INSERT INTO TEST(SITE, SPORT, TOURNAMENT, TEAM_1, TEAM_2, DOUBLE_CHANCE_1X, DOUBLE_CHANCE_X2, DOUBLE_CHANCE_12, DATE_ODDS, TIME_ODDS) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", 
     (Site, sport.strip(), tournament.strip(), team_1.strip(), team_2.strip(), x_odd.strip(), y_odd.strip(), z_odd.strip(), Date_odds, Time_odds)) 
    conn.commit() 

def double_chance(): 
    c.execute("UPDATE TEST SET DOUBLE_CHANCE_1X = x_odd, DOUBLE_CHANCE_X2 = y_odd, DOUBLE_CHANCE_12 = z_odd WHERE TOURNAMENT = tournament and TEAM_1 = team_1 and TEAM_2 = team_2 and DATE_ODDS = Date_odds and TIME_ODDS = Time_odds") 
    conn.commit() 

driver.get(link) 
Date_odds = time.strftime('%Y-%m-%d') 
Time_odds = time.strftime('%H:%M') 
sport = (driver.find_element_by_xpath(".//*[@id='breadcrumb']/li[2]/a")).text #example Footbal 
tournament = (driver.find_element_by_xpath(".//*[@id='breadcrumb']/li[4]/a")).text #example Premier League 
     try: 
     div = (driver.find_element_by_xpath(".//*[@id='breadcrumb']/li[5]/a")).text #to find any division if exists 
     except NoSuchElementException: 
     div = "" 
     market = driver.find_element_by_xpath(".//*[contains(@id,'ip_market_name_')]") 
     market_name = market.text 
     market_num = market.get_attribute('id')[-9:] 
     print market_num 
     team_1 = (driver.find_element_by_xpath(".//*[@id='ip_marketBody" + market_num + "']/tr/td[1]//*[contains(@id,'name')]")).text 
     team_2 = (driver.find_element_by_xpath(".//*[@id='ip_marketBody" + market_num + "']/tr/td[3]//*[contains(@id,'name')]")).text 
     print sport, tournament, market_name, team_1, team_2 
     data_entry() #first SQL call 
     for ip in driver.find_elements_by_xpath(".//*[contains(@id,'ip_market3')]"): 
      num = ip.get_attribute('id')[-9:] 
      type = (driver.find_element_by_xpath(".//*[contains(@id,'ip_market_name_" + num + "')]")).text 
      if type == 'Double Chance': 
       print type 
       print num 
       x_odd = (driver.find_element_by_xpath(".//*[@id='ip_market" + num + "']/table/tbody/tr/td[1]//*[contains(@id,'price')]")).text 
       y_odd = (driver.find_element_by_xpath(".//*[@id='ip_market" + num + "']/table/tbody/tr/td[2]//*[contains(@id,'price')]")).text 
       z_odd = (driver.find_element_by_xpath(".//*[@id='ip_market" + num + "']/table/tbody/tr/td[3]//*[contains(@id,'price')]")).text 
       print x_odd, y_odd, z_odd 
       double_chance() #second SQL call 

c.close() 
conn.close() 

Update:

На основании ответа ниже я обновил код, но я не могу это сделать Работа.

Когда я запускаю его, я получаю следующее сообщение об ошибке:

sqlite3.OperationalError: no such column: x_odd

Что я должен делать?

Update 2:

Я нашел решение:

Я создал уникальный ID для того, чтобы быть в состоянии выбрать именно строку, я хочу, когда я запускаю второй запрос SQL. В этом случае он не изменяет никаких других строк:

def double_chance(): 
    c.execute("UPDATE TEST SET DOUBLE_CHANCE_1X = (?), DOUBLE_CHANCE_X2 = (?), DOUBLE_CHANCE_12 = (?) WHERE ID = (?)",(x_odd, y_odd, z_odd, ID_unique)) 
    conn.commit() 

Теперь он отлично работает.

ответ

1

Используйте инструкцию UPDATE для обновления столбцов в существующей строке.

UPDATE TEST SET DRAW_1=value1,DRAW_2=value2 WHERE column3=value3; 

Если data_entry (1) всегда вызывается первой, а затем изменить заявление в data_entry_2() для обновления. Если нет, вам нужно будет проверить, существует ли строка в обоих случаях, а также INSERT или UPDATE.

+0

Спасибо за ваш ответ !!! но, к сожалению, я получаю сообщение об ошибке – Lord

Смежные вопросы