0

Pythonを使用してnews.ycombinatorRSSフィードを読み、sqlite3を使用してデータベースに保存しています。たとえば、データベースに供給されているサンプルエントリは(id、title、ur)です。

('3814508', 'Github is making me feel stupid(er)', 'http://www.serpentine.com/blog/2012/04/08/github-is-making-me-feel-stupider/')

ここで、idは、WebサイトのコメントスレッドURLで使用されるコメントIDです。上記のリストは、を個別に抽出しids、それらを圧縮することによって作成されています。ここで、データベースにそのようなエントリを複製せずに入力したいと思います。 titleurl

import sqlite3 as lite

con = lite.connect('/path/to/rss.db')
con.text_factory = str
cur=con.cursor()
# --- Extract ids, links, urls ----
zipped = zip( ids, titles, targets)
cur.execute("SELECT Id FROM Posts")
existing_ids = cur.fetchall()
for i in range(0,len(zipped)):
    if ids[i] not in existing_ids:
        cur.executemany("INSERT INTO Posts VALUES(?, ?, ?)", zipped)

問題は、一度に30のフィードがあることです。リストを印刷すると、全体が30で、通常の動作が示されます。しかし、データベースに書き込もうとすると、エントリが多数あるため、「投稿」テーブルで同じ30項目が31回以上繰り返されます。

sqlite> SELECT Count(*) FROM Posts;
930

dbにはスキーマがありますCREATE TABLE Posts(Id TEXT, Title TEXT, Target TEXT);

4

1 に答える 1

2

不足しているエントリを見つけたら、すべてのエントリのリスト全体を挿入しているように見えますか?おそらく、zip形式の各タプルを繰り返し処理し、それぞれがすでに存在するかどうかを確認することを意味しますか?

于 2012-04-08T21:24:24.347 に答える