簡體   English   中英

將數據插入sqlite3數據庫

[英]Insert the data in the sqlite3 database

我需要一些幫助,我創建了一個帶有列的數據庫,以便我可以在數據庫中存儲字符串列表。 現在,我想將數據插入數據庫中,但是它只會將數據存儲在按鈕表中,而不會存儲在程序表中。

當我嘗試這個:

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()

我想在程序表的button_id列中插入數據ids ,但是當我嘗試執行此操作時,什么也沒有發生。

您能幫我如何在程序表中插入數據嗎?

編輯:當我嘗試這樣做:

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

程序表中什么都沒有插入嗎? 我認為,按照當前插入程序表的方式,從第一個for循環中將有如下行:

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

我認為您可能需要在同一條SQL語句中插入button_id和頻道信息等,如下所示:

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

或者,您可以在第二個循環中使用如下的update語句更新字段:

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_id。 也許可以使用program.getChannel等使您可以同時插入button_id。 否則,從發布的代碼中,我不確定如何將您的程序“鏈接”到按鈕ID。 program_button中的elem是否具有獲取頻道或獲取標題屬性? 如果是這樣,上述內容可能會更改為:

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

或類似的規定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM