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

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

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

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

Python

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

Q&A

解決済

1回答

2901閲覧

PythonでMySQLのデータをもとに計算を行いたい

u_k_statistics

総合スコア44

MySQL

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

Python

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

0グッド

0クリップ

投稿2016/08/15 09:54

MySQLに1列目に名前、2~21列目までに数値が入っていて、その数値に変化があればカウントを1増やすという操作をして名前とそのカウントの数を出力したいです。例えば

a 90 90 90 90 90 100 100 100 100 100 110 110 110 120 120 120 120 130 130 130

であれば

a
4

を出力したいです。
どのようにしたらいいのでしょうか?Pythonを使ってMySQLのデータの操作の仕方がわかりません。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

実は私も、MySQLを使いたい場合の決定版がどれなのか分かってなかったりします。
下記の記事(ちょっと古いですが)を参考に、好きなMySQLドライバーを探してください。

Python の MySQL ドライバはどれを利用すれば良いのか | 技術的生存報告記
http://www.sakito.com/2012/10/python-mysql.html

以下のサンプルは、Python3.5.2とPyMySQL3-0.5を使ってデータを取得する例。
行がtupleで返されるので、それを使ってfor文などで処理すれば良いでしょう。

lang

1import pymysql 2 3# 使用するMySQLの接続情報をセット 4cur = pymysql.connect(host="hostname", 5 db="yourdb", 6 user="user", 7 passwd="password").cursor() 8 9cur.execute("select * from users") 10res = cur.fetchall() 11for row in res: 12 print(row) # rowはtuple

投稿2016/08/15 12:47

argius

総合スコア9388

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

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

u_k_statistics

2016/08/18 06:02

argiusさん 回答ありがとうございます。 pymysqlはpython2系を使っているせいかなぜか使えませんでした。 mysql.connectorを使おうと思うのですが、 aというテーブルの中のbというデータベースにアクセスする場合(いまいちデータベースの知識が曖昧なので申し訳ないのですがおそらく a.b と表記してたどり着くデータベース)どのようにしたらよいのでしょうか? いかのようにしてもエラーが出てしまいました。 # -*- coding: utf-8 -*- import sys sys.path.append("/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/") import mysql.connector # 使用するMySQLの接続情報をセット cur = mysql.connector.connect(user='root',password='',host='xxxxx').cursor() cur.execute("select * from a.b") res = cur.fetchall() row_list = [] for row in res: row_list.append(row) for i in range(100): print row_list[i] ========== Traceback (most recent call last): File "file.py", line 9, in <module> cur.execute("select * from a.b") File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mysql/connector/cursor.py", line 473, in execute if not self._connection: ReferenceError: weakly-referenced object no longer exists [Finished in 0.1s with exit code 1]
argius

2016/08/18 12:46

mysql.connector.connect()のところでエラーになっているようです。 コネクターによって書き方が違うみたいなので、 回答に書いたサイトをもう一度よく確認してみて下さい。 ・connect()の"db"が無い ・connect()の"password"ではなく"passwd" ・cursorはconnect().cursor()とせずにいったんconに取得
u_k_statistics

2016/08/23 01:57 編集

argiusさん 回答ありがとうございます。 以下のように実行したのですがエラーが出てしまいました。 他のドライバを使用したほうがいいのでしょうか? # -*- coding: utf-8 -*- import sys sys.path.append("/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/") import mysql.connector # 使用するMySQLの接続情報をセット con = mysql.connector.connect(user='root',db='yamanashi_0520',passwd='',host='xxxxx') cur = con.cursor() cur.execute("select * from 0809") res = cur.fetchall() row_list = [] for row in res: row_list.append(row) for i in range(100): print row_list[i] エラーコード Traceback (most recent call last): File "xxxx/mysql_extract.py", line 10, in <module> cur.execute("select * from 0809") File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mysql/connector/cursor.py", line 507, in execute self._handle_result(self._connection.cmd_query(stmt)) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mysql/connector/connection.py", line 722, in cmd_query result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/mysql/connector/connection.py", line 640, in _handle_result raise errors.get_exception(packet) mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0809' at line 1 [Finished in 0.1s with exit code 1] yamanashi_0520.0809というデータベース(おそらくyamanashi_0520というdbの中の0809というテーブル)を作ったつもりで、そこに接続しようとしています。 userはrootとしていますが、なにか確認する方法はあるでしょうか? プログラミング初心者で何もわかってない部分が多々ありますが教えていただけると幸いです。 自分のキャパを超えていて、わけがわからなくなっていて困っています。 また日本語がデータベースの中に入っているのが原因でしょうか?
argius

2016/08/23 02:05

MySQLまではつながっているみたいです。 あとはSQLに問題があるんだと思います。 0809というのが正しいテーブル名なら、 `0809` (バッククォート) "0809" (ダブルクォーテーション) のように引用符で囲めばアクセスできるはずです。 " "だとPythonの文字列と被るので、`0809`のほうが良いかもですね。 Pythonの文字列を' '(シングルクォーテーション)で囲めば"0809"でも出来るようになります。 ただ、このように数字だけのテーブル名は扱いにくいので、 先頭に1文字で良いので英字を付けるとこのような手間は不要になります。 列名も同じです。こういうのを識別子といいますが、 識別子は他にも予約語と被る(select、など)名前にすると 同じ問題が発生しますので注意してください。
u_k_statistics

2016/08/23 02:11

すいません日本語は入っていませんでした。
argius

2016/08/23 02:19

> 自分のキャパを超えていて、わけがわからなくなっていて困っています。 初心者のうちは分からなくて当然なので焦らずに進めてください。 この問題の場合は、PythonだけでなくSQLとデータベースの知識も要求されているのですから、完全なプログラミング初心者さんにはちょっと難易度が高いと思います。 いろいろやりたいことがあるのは分かります。 そういうモチベーションは重要だと思うので、それは悪くないのですが、基本をすっ飛ばしていろんなことをやろうとすると破綻しますので、基本的なところから着実に学んでいくのが近道です。
u_k_statistics

2016/08/23 09:35

argiusさん なんとかお陰様で解決しました!! 様々な知識を交えて教えてくださり、ありがとうございました。 基本からゆっくり学ぶことを心がけていきたいと思います。
argius

2016/08/23 12:44

解決おめでとうございます! お節介ついでに、もうひとつだけアドバイスさせて下さい。 プログラミングを学ぶ上で、 エラーメッセージを的確に読めるようになることは、上達の秘訣のひとつです。 エラーメッセージの出方はプログラミング言語によって異なりますが、 目的は大体同じです。 Pythonの場合、Tracebackという、どのファイルでエラーが起きているのかをたどっていくメッセージが(割と大量に)出力されますが、そのTracebackの後に、エラーメッセージが表示されます。 このケースでは長いので最後の行が分かりにくいですが、 mysql.connector.errors.ProgrammingError から at line 1 までが、今回のエラーメッセージです。 メッセージは大雑把に言うと、 「MySQLでSQLを処理しようとしたけど'0809'辺りにSQL文法エラーがあります」 と言っています。 これは、たいていMySQLサーバー側でSQLを処理しようとしたときに出ます。 これを読んで、 > MySQLまではつながっているみたいです。 > あとはSQLに問題があるんだと思います。 と判断しました。 以上、参考になれば幸いです。 難しいと思ったら、今は読み飛ばしても構いません。 良かったらいつか読み返してみて下さい。 それでは、プログラミングの学習、頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問