PythonでMySQLデータベースに日付を保存・取得する方法を徹底解説
MySQLデータベースに日付を保存するには、まずテーブルにDATE型またはDATETIME型のカラムを用意する必要があります。カラムが準備できたら、データベースへ挿入する前に日付を文字列形式へ変換します。この変換には、Python標準ライブラリのdatetimeモジュールにあるstrftime()関数を使うのが一般的です。
日付を挿入する方法
now.strftime('%Y-%m-%d %H:%M:%S')のように書式を指定すると、現在日時を「年-月-日 時:分:秒」形式の文字列に整形できます。あとは、プレースホルダー(%s)を使ったパラメータ化クエリでINSERT文を実行するだけです。
from datetime import datetime
# 現在の日時を取得
now = datetime.now()
id = 1
# DATETIME型に合わせた形式の文字列へ変換
formatted_date = now.strftime('%Y-%m-%d %H:%M:%S')
# cursorという名前のカーソルでクエリを実行する場合
cursor.execute(
'insert into table(id, date_created) values(%s, %s)',
(id, formatted_date)
)
このコードを実行すると、タプル(id, formatted_date)の値がテーブルに挿入されます。なお、プレースホルダーを使ったパラメータ化クエリはSQLインジェクション対策としても有効です。文字列連結でSQL文を組み立てる方法は避けるようにしましょう。
日付を取得してdatetimeオブジェクトへ戻す方法
SELECT文でデータベースから日付を取得した場合、その値を再びdatetimeオブジェクトとして扱いたいときは、strptime()関数を使って解析(パース)します。
from datetime import datetime
# cursorという名前のカーソルでクエリを実行する場合
cursor.execute('select id, date_created from table where id=1')
# 上で挿入した行は次のように取得できる
id, date_str = cursor.fetchone()
# 日付は保存時と同じ形式の文字列で返されるため、strptimeで解析する
created_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
これにより、作成日時を取得し、datetimeオブジェクトとして復元できます。復元後はyearやmonthなどの属性へのアクセスはもちろん、日付同士の比較や加減算など、Pythonならではの柔軟な日付操作が可能になります。
補足:使用しているMySQLコネクタ(mysql-connector-pythonやPyMySQLなど)によっては、DATETIME型のカラムが自動的にdatetimeオブジェクトとして返される場合もあります。その場合はstrptime()による変換は不要です。実際にどの型で返ってくるかは、type(取得した値)で確認しておくと安心です。
-
JDBCを使ってMySQLデータベースにファイルを保存・挿入する方法
一般的に、ファイルの内容はMySQLデータベースでは Clob 型(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)のカラムに保存されます。 JDBCはClob型をサポートしており、これを利用することでファイルの内容をデータベースのテーブルに格納できます。 PreparedStatement インターフェースが提供する setCharacterStream() メソッドは、パラメータのインデックス(位置)を表す整数と、Readerオブジェクトを引数として受け取ります。 このメソッドを使うと、指定したインデックスのプレースホルダ(?)に対して、Readerオブジェクト(ファイ
-
Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】
はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId