私は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);