複数の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"
はレコード毎に空白行ができてしまう現象を防ぐための措置。