2016-02-27 5 views
0

Мне нужна помощь, я создал базу данных с столбцами, чтобы я мог хранить список строк в базе данных. Теперь я хотел бы вставить данные в базу данных, но он будет хранить данные только в таблице кнопок, но не для таблицы программ.Вставьте данные в базу данных sqlite3

, когда я пытаюсь это:

cur = con.cursor() 
cur.execute('CREATE TABLE programs(channel TEXT, title TEXT, start_date TIMESTAMP, stop_date TIMESTAMP, button_id TEXT, description TEXT)') 
con.commit() 


for program in channel.findall('programme'): 
    cur.execute("INSERT INTO programs(channel, title, start_date, stop_date)" + " VALUES(?, ?, ?, ?)", [channel_name, title, start_time, stop_time]) 

programs_id = list() 

for elem in program_button: 
    programs_id.append(elem.getId()) 
programs_id = map(str, programs_id) 

#store the id and width of buttons in a database 
for ids, width in zip(programs_id, program_width): 
    cur.execute("INSERT INTO buttons(button_ids, button_width)" + " VALUES(?, ?)", [ids, width]) 
    cur.execute("INSERT INTO programs(button_id)" + " VALUES(?)", [ids]) 
con.commit() 
cur.close() 

Я хочу, чтобы вставить данные ids в столбце button_id в таблице программ, но когда я пытаюсь его ничто не происходит.

Не могли бы вы помочь мне, как я могу вставить данные в таблицу программ?

EDIT: Когда я пытаюсь это:

for ids, width in zip(programs_id, program_width): 
    cur.execute("UPDATE programs SET button_id = ? WHERE title=?", ([ids, title])) 

Здесь будет хранить данные в неправильных строк.

#yields:  
#channel | title  | start_date | stop_date | button_id | description 
########################################################################### 
#BBC One  | Tomorrow's Food | '2015-01-01'|'2016-01-01'| 3003 | blank 
#BBC One  | BBC News at Ten | '2015-01-01'|'2016-01-01'| 3056 | blank 
#BBC One  | South E Today | '2015-01-01'|'2016-01-01'| 3125 | blank 
#BBC One  | A Question of S | '2015-01-01'|'2016-01-01'| 3006 | blank 
#BBC One  | Film 2016  | '2015-01-01'|'2016-01-01'| 3007 | blank 

Это должно быть так:

#yields:  
#channel | title  | start_date | stop_date | button_id | description 
########################################################################### 
#BBC One  | Tomorrow's Food | '2015-01-01'|'2016-01-01'| 3003 | blank 
#BBC One  | BBC News at Ten | '2015-01-01'|'2016-01-01'| 3004 | blank 
#BBC One  | South E Today | '2015-01-01'|'2016-01-01'| 3005 | blank 
#BBC One  | A Question of S | '2015-01-01'|'2016-01-01'| 3006 | blank 
#BBC One  | Film 2016  | '2015-01-01'|'2016-01-01'| 3007 | blank 

ответ

1

не что иное, вставляется в таблицу программ на всех? Я думаю, что с текущим, как вы вставляете в таблицу программ вы бы строки, как это из первых для цикла:

channel | title | start_date | stop_date | button_id | description 
########################################################################### 
chanel1 | title1 | start1  | stop1  | blank  | blank 

А из вашего второго цикла вы бы строки, как это:

channel | title | start_date | stop_date | button_id | description 
########################################################################### 
blank | blank | blank  | blank  | id1  | blank 

Я думаю, что вам может понадобиться, чтобы вставить button_id и канал информации и т.д. в том же операторе SQL, как это:

cur.execute("INSERT INTO programs(channel, title, start_date, stop_date, button_id)" + 
    " VALUES(?, ?, ?, ?)", [channel_name, title, start_time, stop_time, button_id]) 

Или вы можете обновить поля с помощью оператора обновления, как это в ваш второй цикл:

cur.execute("UPDATE programs SET button_id = ? WHERE title=?", 
    (button_id, title,)) 

Если название (или другое поле) является вашим первичным ключом для таблицы или вставить button_id первыми и завершить обновление заявление:

cur.execute("UPDATE programs SET channel=?, title=?, start_date=?, end_date = ? WHERE button_id = ?", 
    (channel, title, start_date, end_date, button_id,)) 

пример для расширения на Ваш комментарий:

channel_name = 'PBS' 
title = 'planet earth' 
start_date = '2015-01-01' 
end_date = '2016-01-01' 

cur.execute("INSERT INTO programs(channel, title, start_date, stop_date)" + 
    " VALUES(?, ?, ?, ?)", [channel_name, title, start_time, stop_time]) 

#yields:  
#channel | title  | start_date | stop_date | button_id | description 
########################################################################### 
#PBS  | planet earth | '2015-01-01'|'2016-01-01'| blank  | blank 

button_id = '1' 
title = 'planet earth' 

cur.execute("UPDATE programs SET button_id = ? WHERE title=?", 
    (button_id, title,)) 

#yields:  
#channel | title  | start_date | stop_date | button_id | description 
########################################################################### 
#PBS  | planet earth | '2015-01-01'|'2016-01-01'| '1'  | blank 

Я думаю, что проблема прямо сейчас заключается в том, что вы не используете button_ids, которые связаны с вашими программами. Возможно, использование program.getChannel и т. Д. Будет работать так, что вы можете одновременно вставить button_id. В противном случае из отправленного кода я не уверен, как связать вашу программу с идентификатором кнопки. Имеет ли elem в program_button канал получения или атрибут title? Если так, то это может измениться на:

cur.execute("UPDATE programs SET button_id = ? WHERE title=?", 
    (button_id, elem.getTitle(),)) 

Или что-то в этом роде.

+0

Большое спасибо за это, но когда я пробую этот «cur.execute (« UPDATE program SET button_id =? », ([Ids])), он будет обновлять одни и те же данные в каждой строке базы данных, поэтому как я могу обновлять данные в таблице без повторения, поскольку я использую их в цикле? – Rob

+0

Посмотрите на нижнюю часть ответа, я изменил его, чтобы отразить ваш комментарий.Основная проблема - это предложение WHERE в команде SQL обновления. –

+0

Я не думаю, что вы понимаете, что я пытаюсь сказать. В нижней части моего вопроса, который я отредактировал, вы увидите, что данные 'button_id' были обновлены в неправильных строках, которые должны были обновляться в каждой строке, не запутавшись. – Rob

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