0

pyodbc を使用して MS-Access データベースに保存されたイベントを処理しています。各月は個別のファイル/データベースであり、複数の月のイベントを処理したいと考えています。

複数の月、つまりデータベース接続を含むビューへのカーソルを作成することは可能ですか?

編集 1: 新しいデータベースを作成する必要はありませんか? (UNION VIEWとかかな?)

4

1 に答える 1

4

複数の接続とカーソルを作成する必要がありますが、データを処理できるはずです。

ファイルが、 などとしてmonth_1.mdbに保存されているとしましょう。month_2.mdbC:\access

# Set up each connection, must have a way to access each file's name
connect_string = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\access\\month_{}.mdb;"
# Assuming that you'll get the same data from each database
sql = "SELECT column_1, column_2 FROM table"
# Connect to each file
connections = [pyodbc.connect(connect_string.format(n)) for n in range(1, 12 + 1)]
# Create a cursor for each file
cursors = [conn.cursor() for conn in connections]
# Query each file and save the data
data = []
for cur in cursors:
  cur.execute(sql)
  data.extend(cur.fetchall())

よし、これですべてのデータが揃った。モジュールを使用してメモリ内データベースを作成し、sqlite3それに対してクエリを実行できます。

import sqlite3
# Create your temporary database
connection = sqlite3.connect(":memory:")
cursor = connection.cursor()
# Set up a place to hold the data fetched previously
_ = cur.execute("CREATE TABLE t(x INTEGER, y INTEGER)")
# Dump all the data into the database
for column_1, column_2 in data:
  _ = cursor.execute("INSERT INTO t VALUES (?, ?)", [column_1, column_2])
# Now you can run queries against the new view of your data
sql = "SELECT t.column_1, t.count(*) FROM t GROUP BY t.column_1"
于 2013-06-06T12:26:03.653 に答える