PythonでSQLiteデータベースの全テーブルと行数をカウントする方法

SQLiteデータベースのテーブル統計取得

データ分析やデータベース管理において、データベース内の各テーブルの構造とデータ量を把握することは非常に重要です。本記事では、PythonとSQLiteデータベースを利用して、データベース内の全テーブルとその行数を統計的に取得する方法を紹介します。

背景知識

SQLiteは軽量級リレーショナルデータベース管理システムであり、組み込みシステム、モバイルアプリケーション、小規模Webアプリケーションなどで広く利用されています。個別のサーバープロセスやシステム設定を必要としないため、迅速な開発とテストに最適です。

特定のケースでは、データベース内の各テーブルのデータ量を理解することが必要になります。これはクエリパフォーマンスの最適化、ストレージニーズの評価、またはデータクリーンアップ作業に役立ちます。Pythonはsqlite3モジュールなどの強力なライブラリを提供しており、SQLiteデータベースとの簡単なインタラクションを実現できます。

実装手順

SQLiteデータベースの全テーブルとその行数を統計するには、以下の手順に従います:

  1. SQLiteデータベースに接続します。
  2. データベース内の全テーブル名を取得します。
  3. 各テーブルを反復処理し、その行数を計算します。
  4. 結果を出力します。

コード例

以下は上記機能を実現する完全なPythonスクリプトです:


import sqlite3
from tabulate import tabulate

def analyze_database_structure(database_path):
    # データベース接続の確立
    db_connection = sqlite3.connect(database_path)
    db_cursor = db_connection.cursor()
    
    try:
        # 全テーブル名の取得
        db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
        all_tables = db_cursor.fetchall()
        
        # 結果格納用リスト
        results = []
        
        # 各テーブルの行数を計算
        for table_info in all_tables:
            current_table = table_info[0]
            db_cursor.execute(f"SELECT COUNT(*) FROM [{current_table}];")
            record_count = db_cursor.fetchone()[0]
            results.append([current_table, record_count])
        
        # 表形式で結果を表示
        headers = ["テーブル名", "レコード数"]
        print(tabulate(results, headers=headers, tablefmt="grid"))
        
    except sqlite3.Error as db_error:
        print(f"データベース操作エラー: {db_error}")
        
    finally:
        # データベース接続のクローズ
        db_connection.close()

# メイン実行ブロック
if __name__ == "__main__":
    target_db = "sample.db"  # ご自身のデータベースパスに置き換えてください
    analyze_database_structure(target_db)

コード解説

このスクリプトでは、まずsqlite_masterテーブルをクエリしてデータベース内の全テーブル名を取得します。次に、各テーブルに対してCOUNT(*)クエリを実行して行数を計算します。

try-except-finallyブロック内でデータベース操作を処理しており、エラーが発生してもデータベース接続が正しくクローズされるように保証しています。また、結果表示にはtabulateライブラリを使用し、より見やすい表形式で出力しています。

実行結果例

sample.dbというSQLiteデータベースがあり、以下の2つのテーブルが含まれているとします:

  • customers: 顧客情報を格納
  • products: 製品情報を格納

上記スクリプトを実行すると、以下のような出力が得られる可能性があります:


+-------------+--------------+
| テーブル名  |   レコード数 |
+=============+==============+
| customers   |         250  |
+-------------+--------------+
| products    |         150  |
+-------------+--------------+

注意事項

実際のアプリケーションでは、以下の点に注意してください:

  • データベースファイルのパスが正しいことを確認してください。
  • データベースが大規模な場合、行数の統計に時間がかかる可能性があります。
  • 頻繁にアクセスされる本番データベースでは、パフォーマンスに影響を与える可能性があるため、この種の操作は避けてください。

拡張機能

より高度な分析が必要な場合は、以下のような機能を追加することもできます:

  • 各テーブルのスキーマ情報の取得
  • テーブルサイズの計算
  • 特定の条件下でのレコード数のフィルタリング

タグ: Python SQLite データベース テーブル 行数

5月31日 11:25 投稿