簡體   English   中英

用 python 中的鏈接填充 sqlite3 db

[英]populating sqlite3 db with links in python

我正在嘗試使用帶有字符串列表(鏈接)的單列填充數據庫。 我刮掉了列表,在將其發送到數據庫之前,我必須修改每個鏈接。 這是代碼:

for event in events:
    link_url = "https://www.website.com"+event+"#all"
    c.execute("INSERT INTO table (links) VALUES(?)", link_url)

如果我修改變量並發送一個元組,我可以讓它工作,如下所示:

for event in events:
    link_url = "https://www.website.com"+event+"#all"
    link = (link_url,)
    c.execute("INSERT INTO seriea (links) VALUES(?)", link_url)

但我不想使用這個解決方案,因為我想稍后得到一個字符串列表:

c = connection.execute('select links from table')
list_of_urls = c.fetchall()

但這給了我一個元組列表。

這是我遇到的錯誤: ProgrammingError: 提供的綁定數量不正確。 當前語句使用 1,提供了 80 個。

我認為這是因為字符串字符被計算在內(實際上更多,但我注意到“提供”之前的數字隨着鏈接的變化而變化)

我不想使用此解決方案,因為我想稍后獲取字符串列表:

 c = connection.execute('select links from table') list_of_urls = c.fetchall()

但這給了我一個元組列表。

執行 select 時獲得的元組列表與插入數據的方式無關。 請記住,表格有兩個維度:

ID 鏈接 某物 別的
1 “富” “酒吧” “巴茲”
2 “曲子” “皰疹” “德普”

當您執行 select 時,您會得到一個與此處的行相對應的列表。 但每一行都有多個字段: idlinkssomethingelse 列表中的每個元組都包含表中每個字段的值。

如果您只想將 URL 作為字符串列表,則可以使用列表推導或類似方法:

c = connection.execute('select links from table')
list_of_rows = c.fetchall()
list_of_strings = [row[0] for row in list_of_rows]
#                      ^ index of first element in
#                  ^^^ the tuple of values for each row

請注意,插入數據時必須提供元組或其他序列:

對於 qmark 樣式, parameters必須是一個序列 對於命名樣式,它可以是序列字典實例。 序列的長度必須與占位符的數量匹配,否則會引發ProgrammingError 如果給定一個dict ,它必須包含所有命名參數的鍵。

您可能以錯誤的方式思考它的元組部分。 您不需要傳入 URL 元組,您需要傳入參數元組。 你不是說“鏈接列應該包含這個元組”,而是“這個元組包含足夠的值來填充這個查詢中的占位符”。

我會這樣重寫:

for event in events:
    link_url = "https://www.website.com"+event+"#all"
    c.execute("INSERT INTO seriea (links) VALUES(?)", (link_url,))

這樣您就可以有多個參數,例如

c.execute(
    "INSERT INTO seriea (links, some, other) VALUES(?, ?, ?)",
    (link_url, foo, bar),
)

當前語句使用 1,提供了 80 個。

我認為那是因為字符串字符被計算在內

是的,這很可能是正在發生的事情。 c.execute()期望接收一個序列,字符串是一個字符序列。

暫無
暫無

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

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