Colorful Life2010

PythonでMDBのデータをSQLiteに移動してみる

Access2000のMDBファイルのloto6のデータをSQLiteに移動してみます。ただMDBのデータ取得だけでは何なので、loto6 のデータを使ってみました。

# encoding: cp932
import win32com.client
import sqlite3

MDB_NAME = r"loto.mdb"
SQLITE_NAME = r"loto.lit"

# Accessのデータベースを開きます
m_con = win32com.client.Dispatch("ADODB.Connection")
m_con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;" % (MDB_NAME))
rs = win32com.client.Dispatch('ADODB.Recordset') 
rs.Open("SELECT [No],N1,N2,N3,N4,N5,N6,BN FROM loto6;", m_con) 

# SQLiteのデータベースを作成します。
s_con = sqlite3.connect(SQLITE_NAME)
c = s_con.cursor()
c.execute("""CREATE TABLE loto6 (
    id INTEGER PRIMARY KEY,
    n1 INTEGER,
    n2 INTEGER,
    n3 INTEGER,
    n4 INTEGER,
    n5 INTEGER,
    n6 INTEGER,
    bn INTEGER
    )""")

# データをSQLiteにコピーしていきます
while not rs.EOF:
    c.execute('INSERT INTO loto6 VALUES (?,?,?,?,?,?,?,?)',(
        rs.Fields('No').Value, 
        rs.Fields('N1').Value,
        rs.Fields('N2').Value,
        rs.Fields('N3').Value,
        rs.Fields('N4').Value,
        rs.Fields('N5').Value,
        rs.Fields('N6').Value,
        rs.Fields('BN').Value))
    #print rs.Fields('No').Value
    rs.MoveNext() 

s_con.commit()
rs.Close()
m_con.Close()

# SQLiteのデータを表示してみます
for x in c.execute('SELECT * FROM loto6 WHERE id>400'):
    print x

ただ、どうもSQLiteにコピーするところで時間がかかっている感じがします。421件のデータでゆっくりしているようではいけませんぞ。 GetRowsで一気に配列としてデータを取得した方がいいのかな(GetRowsで得る配列は縦横が逆なのでちょっと面倒ですが)。

from:http://d.hatena.ne.jp/Fio/20081123/p1

历史上的今天: [2007/04/16]今天看的进度慢了些
[2007/04/16]无耻的网通,恶心的“健康商城”

[PythonでMDBのデータをSQLiteに移動してみる]的回复

Post a Comment~