複数のSqlite dbファイルにある同じ構造のテーブルからデータを抽出するメモ

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sqlite3
import csv

writer = csv.writer(file('result.csv','w'),lineterminator="\n",quoting = csv.QUOTE_ALL)  
con = sqlite3.connect(':memory:')
cur = con.cursor()

sql2 = "SELECT * FROM (SELECT * FROM tweet"
for i in xrange(1,10): #dbファイルの数
    sql = "ATTACH DATABASE 'tweet%d.db' as tweet%d" % (i,i)
    con.execute(sql)
    con.commit()
    sql2 = sql2 + """ UNION ALL SELECT *
                        from tweet%d.tweet""" % (i)
                        
sql2 = sql2 + ") t WHERE created_at >= datetime(?) AND created_at < datetime(?)"
                        
for row in cur.execute(sql2,('2011-10-01','2011-10-03')):
    try:
        writer.writerow([col.encode('s-jis') if isinstance(col, unicode) else col for col in row])
    except:
        pass

cur.close()
con.close()

tweet+番号.dbという名前の複数ファイルがあって
それぞれに同じ構造のテーブルtweetがある。
created_atカラム(日付)でのデータ絞込み。

lineterminator="\n"
はレコード毎に空白行ができてしまう現象を防ぐための措置。