質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3830閲覧

PythonでMySQLのTIME型をSELECTする方法

Non-Face

総合スコア11

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/08/14 16:10

PythonでMySQLのTIME型をSELECTする方法がわからないのでよろしくお願いいたします。
このプログラムを起動→起動時の時刻を取得→データベースに挿入→データベースから抜き出し→表示
という感じなのですがどうも抜き出したときに形が変わってしまうようです。

詳しく説明すると
DatetimeでHH:MM:SSという形で取得します。
そしてtb_nameというテーブルの日付型のDATE型HH:MM:SSの形で保存します。
その後、SELECT文でHH:MM:SSを抽出・c.fetchall()で取得という感じにしたいのですが、(datetime.timedelta(0,7968))というような形で表示されます。
エラーは特にでないのですが、思っていた形と違うのでとても困っています。
(datetime.timedelta(0,1234)のような形からHH:MM:SSへ変更する方法、もしくはHH:MM:SSの形で取得する方法がありましたらご教示お願い致します。
よろしくお願いいたします。

python

1import mysql.connector 2from datetime import datetime 3 4conn=mysql.connector.connect( 5 host='localhost', 6 port='3306', 7 user='user', 8 password='password', 9 database='database', 10 ) 11c=conn.cursor() 12 13def main(): 14 c.execute('CREATE TABLE IF NOT EXISTS tb_name(time time)') 15 date=datetime.now().strftime('%X') 16 print (date) 17 c.execute('''INSERT INTO tb_name(time) VALUES(%s)''',(date,)) 18 conn.commit() 19 20 c.execute('''SELECT time FROM tb_name''') 21 print(c.fetchall()) 22 23if __name__=='__main__': 24 main() 25

実行結果の例

16:42:53
[(datetime.timedelta(0, 7968),), (datetime.timedelta(0, 8060),)]

アドバイスや必要な追加情報などありましたら宜しくお願い致します。

環境

windows 10
mysql 5.7.23
Python 3.6.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

回答ありがとうございました。
自己解決しましたのでここに報告させていただきます。

python

1c.execute('''SELECT time FROM date_tb''') 2while True: 3 times=c.fetchone() 4 for time in times: 5 print(time)

とするとなぜかHH:MM:SSで出力できました。理由はわかりません。
しかしリストにするとまたdatetime.timedelta(○, ○○○○○)という形になりました。その解決方法は以下になりました。

python

1list=[] 2c.execute('''SELECT time FROM date_tb''') 3while True: 4 times=c.fetchone() 5 for time in times: 6 print(time) 7 list.append(str(time)) 8print(list) 9

とするとHH:MM:SSの形でリストに挿入することができました。
上のようにwhile True: にすると終わりがなく最後はエラーになりprint(list)は実行されませんが工夫すれば改良できます。

この度はありがとうございました。

投稿2018/08/18 08:40

Non-Face

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

MySQLのTime型をORマッパーがtimedeltaにしているのでしょうね。

TIME_FORMATでDBから文字列で取得して、文字列からstrptimeでDate型にするとか
でしょうか。

投稿2018/08/15 03:33

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Non-Face

2018/08/16 10:08

回答ありがとうございます。 c.execute('''SELECT TIME_FORMAT("time","%H:%M:%S") FROM date_tb''') print (c.fetchall()) としたところ [(None,), (None,), (None,)]といった結果が返ってきたためstrptimeができませんでした。
t_obara

2018/08/16 10:32

あれ、MySQL側はDate型ですか?それではDATE_FORMATになるのかな。
Non-Face

2018/08/16 11:16

Time型になります。 c.execute('''SELECT time FROM date_tb''') times=c.fetchone() for time in times: print(time) とするとなぜか一つだけうまく表示されましたが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問