Pythonで MariaDBのデータをCSVに書き出す

Ubuntu Desktop 22.04 LTS ノウハウ
Pythonで
MariaDBからデータを読んでCSVに書き出す
 
データ分析の準備として、データベースの中身を「Python」でCSVに書き出してみる。
 
ヘッダーを書き込む
 
以下、MariaDBからデータを読んでCSVにエクスポートする Python プログラムを記録。
 
 

 

スポンサー リンク

 

 
 
 
 
 
1. 事前準備
 
PythonからMySQLに接続するために、「mysql-connector-python」ライブラリをインストールする。
pip install mysql-connector-python
 
 
MariaDBサーバへの接続。
sudo su
mysql -u root
 
データベースの選択。
use ondodb;
 
作成済みのテーブル一覧を表示。
show full tables;
 
作成済みのテーブル一覧を表示
 
テーブルのカラム一覧を表示。
show columns from ondo_situdo;
describe ondo_situdo;
 
テーブルのカラム一覧を表示
 
 
 
2. CSVへの出力結果とPythonソースコード
 
LibreOfficeの「Calc」への取り込み。
LibreOfficeの「Calc」への取り込み
 
CSVへの出力結果を、LibreOfficeの「Calc」で表示。
CSVへの出力結果
 
Pythonのソースコード
# -*- coding: utf-8 -*-

import csv
import mysql.connector

# MariaDBへの接続設定
db_config = {
    'host': 'localhost',
    'user': 'flaskpy',
    'password': 'dht22x4',
    'database': 'ondodb'
}

# CSVファイルに書き出す際のファイルパス
csv_file_path = 'work/ondo_situdo_01.csv'

# MariaDBへの接続
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()

try:
    # データの取得クエリ
    query = 'SELECT * FROM ondo_situdo'
    cursor.execute(query)

    # 取得したデータをCSVファイルに書き出す
    with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file:
        csv_writer = csv.writer(csv_file)
        
        # ヘッダーを書き込む
        csv_writer.writerow([i[0] for i in cursor.description])
        
        # データを書き込む
        csv_writer.writerows(cursor.fetchall())

    print(f'Data exported to {csv_file_path}')

except Exception as e:
    print(f'Error: {e}')

finally:
    # 接続を閉じる
    cursor.close()
    conn.close()
 
 
 
3. Python プログラムのポイント
 
Pythonでの例外処理:try-except
 
Pythonでは「try-except」で「例外処理(exception)」を記述しておくと、予期せぬエラーを未然に防ぐことができる。文法的に正しいコードを書いても、実行時にエラーが発生することがあり、これが「例外」である。
try: 
    例外が発生するかもしれないが
except エラー名:
    例外発生時に行う処理
 
テーブルに含まれるカラムの情報を取得する:cursor.description
 
cursor.description は、SQLクエリの実行結果から取得された結果セットのメタデータを含むオブジェクトで、取得したデータの各列に関する情報が抽出できる。
 

cursor.description から返されるオブジェクトは、次のようなタプルのリストで、
各タプルには列に関する情報が含まれる。

name: 列の名前
type_code: 列のデータ型のコード
display_size: 列のデータを表示するために必要な最大の文字数
internal_size: 列の内部的なデータ型のサイズ
precision: 数値列の精度(有効桁数)
scale: 数値列のスケール(小数点以下の桁数)
null_ok: 列がNULLを許可する場合はTrue

# ヘッダーを書き込むコード。
csv_writer.writerow([column[0] for column in cursor.description]) 
 
cursor.description から各列の名前 (name属性) を抽出し、それをCSVファイルのヘッダーとして書き込むための行で、列の名前がCSVファイルのヘッダー行として最初の行に書き込まれる。
 
ヘッダーを書き込む
 

 

以上。
(2024.02.21)

 

 

スポンサー リンク

 

             

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください