2012-04-08 25 views
0

私はnews.ycombinatorのRSSフィードをpythonで読み込み、sqlite3を使ってデータベースに保存しています。例えば、データベースに供給されているサンプルエントリは、(ID、タイトル、UR)IDが自分のコメントスレッドのURLでウェブサイトで使用されるコメントIDであるデータベースpythonの重複したエントリを繰り返します。sqlite3

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

あります。上記のリストは、ids,titleおよびurlを個別に抽出して圧縮したものです。今度は、そのようなエントリが重複しないようにデータベースを作成したいと思います。

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項目を超える繰り返し、テーブル「記事」

sqlite> SELECT Count(*) FROM Posts; 
930 

デシベルは、スキーマを持っているでは31倍以上されているCREATE TABLE Posts(Id TEXT, Title TEXT, Target TEXT);

答えて

2

行方不明のエントリを見つけたら、すべてのエントリのリスト全体を挿入しているようですね。おそらく、あなたは各組のzipを繰り返し処理し、既に存在するかどうかを確認することを意味しますか?

関連する問題