つきすけ の コーディング記

細かいところで嫌にならないように、小さいことでも解説していくブログ。たまに関係ないことも書く。

MySQL使った時に起きたくだらないミスによるエラーまとめ(Python含む)

くだらないエラーで悶々と悩む人よ、
僕のミスを見て、もしかしたら同じ躓きに気づけるかもしれない!!

くだらないミスまとめ(MySQLそのもの)

そもそもデータベース作れてなかった
ERROR 1045(28000) Access denied for user ……

最初は root で入ろうな!

mysql -u root -p;
create database DATABASENAME;
ユーザー登録ができない
ERROR 1064(42000): You have an error in your SQL syntax; check the manual……

構文が古い可能性が•••••?
grant all on …… の一行では(もう?)できないんだって。
こうやって書けばいけると思う。

create user ‘USERNAME’@‘localhost’ identified by ‘PASSWORD’;
grant all on DATABASENAME.* to ‘USERNAME’@‘localhost’ with grant option;
flush privileges;

ちなみに、二行目の「.*」を忘れると、1064(3D000)エラーになるぞ。



やっと、以下の文で入れるようになったー。

mysql -u USERNAME -p DATABASENAME 

くだらないミスPythonの時


Pythonはエラーメッセージがわかりやすい。


mysql-connection-python がない

anaconda にありがちかもしれないが、pip 使うのにこう書く必要あったりする。

python -3 pip install mysql-connection-python

普通のPythonライブラリと混ざって、anacondaライブラリに追加されてなかったりするから••••••


fetchone とか綴り間違えがち

fethone とか書いてたわ。fetchone な!


複数形のs忘れがち
mysql-connector.errors.ProgrammingError: 1064(42000): ……

「そんなデータの格納場所ねえよ」って言ってるかも。
スペルミスとか複数形のsとかに注意。


’ ’忘れがち
_mysql-connector.MySQLInterfaceError: ……

文字列はちゃんと囲め。特にデータ追加するときとかな••••••


intじゃなくてintoだから

データを後から入れたい時に出たエラー

mysql.connection.errors.ProgrammingError: 1054(42S22): …...

僕は、こう書いていた、

insert int log ……

これはintoだ。

insert into log ……

おそらくスペルミスでこの辺は同じエラーが出る。


結論

またSyntaxなんとかってエラー文出てないかを見てみる。
出てたら、スペルミスか、閉じカッコがないとか、カッコの種類が違うとか、そんなものだ••••••

WEBページが作りたい人向けの足がかり

何を勉強すればいいですか?

優先順位

  1. HTML
  2. CSS
  3. JavaScript

なお、詳しい説明はしません。

HTML

必須。
これをコピペして、適当な名前.htmlで保存して、ダブルクリックしてみよう。

<html>
   <body>
      初めてのHTML
   </body>
  </html>

君の初めてのWEBページの完成だ。

CSS

今時代必須。
色とか付けるにはこれつかうしかない。
自力で調べて。

JavaScript

しばらくは知らなくていい。

【小休止】0からプログラミングの勉強をする

言語によるってどのくらい違う?

独断と偏見で選んだ、よく出会いそうな四つの言語を比べてみた。

計算して出力する

以下はすべて、最終的に 2 を出力するプログラム。
※出力:画面に出してくれる。

# Python
a = 1
print(a + 1)
// C言語 
int a = 1;
println(a + 1);
// Java 
int a = 1;
System.out.printf(a + 1);
// JavaScript
var a = 1;
console.log(a + 1);
// JacaScriptは用途がちょっと特殊 
あくまで感覚の違いなので、実際書く時は1から調べてな。

変数宣言は、
var a = 1; とか int a = 1; とか書いてあるけど、

int a;
a = 1;

みたいに分ける方がよく見る気もする。

【第零〜第三回まとめ】今までの書き方じゃ回りくどい人たちへ

回り道すぎる書き方は逆に混乱をもたらす!
そんな人に!

プログラムって何?

覚えてくれる。計算してくれる。

a = 1
b = 2
a + b
# 結果は3

変数って何?

上記で言うaとかbとかのこと。あいつら上書きできる。だから変数。

条件分岐って何?

aが1だったら〜して。みたいな書き方。
ちなみに、それ以外なら〜って書き方もある。こんな感じ。

a = 1
if a == 1 :
 print(a) # aが1なら、aって表明して
else:
 print(“no”) # aが1じゃないなら、noって表明して

関数って何?

プログラムの動きを先に決めておけ。肝心な値とかは後で教えるから。



推敲前

【第三回】(関数)0からプログラミングについて勉強する

だんだん嫌な言葉になってきた。
それでいて、今までの自分が回りくどいんじゃないかと思い始めた。
万人にわかりやすいなんて難しい。

忙しい人向け

※これでわかれば以下はすっ飛ばしてよし。

関数

y = ax + b 

を覚えているか?
一次関数だ。
先に a と b が決まっていると、

y = 3x + 3

みたいな式になるな。

数学における関数と意味は同じ。
「かかわる数、、、」
上記の場合、y を導くには、a と b (今回はどちらも3)が関わっている。
この式こそ関数。

「値を指定すれば、一つの答えを出すもの」
これが関数。

x = 2
3x + 3
# 答えは? 「9」

ただ、あえて関数という言葉を使うには意味がある。
上記の 3x + 3 も、x = 2 に限らずいろいろ使いまわせる。
つまりプログラミング上では、関数は定義して使いまわすもの、という意味合いがある。
この書き方は相当言語による。面倒だ。

【ある計算をする関数です】(x 待機中)
  3x + 3

# さっきの関数を呼び出す。

【ある計算をする関数】(3 をあげます)
#「9」という答えを出してくれる。

引数というもの

さきほど(x 待機中)という風に書いた。
こんな風に、待っていることに対する言葉が、引数。

この場合、【ある計算をする関数】は、数値を引数にとる。

という。
x は数値でなければならないから、こういう表現になる。
なんでこんな呼び方をするかというと、引数は増殖するから。
第一引数、第二引数、、、などと言って指定したりするから。

以上




※余力がある人は最後の章も覗いてみて欲しい。



のんびり進めたい人向け

ゆっくり行こう。

関数

嫌な言葉? それとも好き?
もし嫌いなら、これまでの感情と考えを全部忘れて、新たに覚えたい。
細かい定義をすっ飛ばして言うならば、関数は、
【使いまわせるプログラム】
のこと。

もし関数の概念をすでに知っているなら困惑するかもしれないのでスキップ。
これからの人は聞いてほしい。
よく教本で書かれている。
関数とは「プログラムを使いまわせるようにしたもの」
個人的にこの表現が良いのかはちょっとわからない。

にんじんを輪切りにしてくれ。
輪切の仕方はこうやるんだ。

と命令してみた。

で、今度は、

きゅうりを輪切りにしてくれ。
輪切りの仕方はこうやるんだ。

と言う。
※この際これらを輪切りというかは放っておいてくれ。

あなたは気づいたか?
輪切りの仕方を、二度も教えていることに!

と言うことで、輪切り関数を書いた。
輪切りの仕方はここに書いてある。

にんじんを輪切りにして。やり方はこの関数に書いてあるから。

きゅうり輪切りにして。やり方はこの関数に書いてあるから。

うん。これで伝わりやすい人と伝わりづらい人、どちらもいる気がしてならない。

ちょっと具体的に

やはりこの辺まで来ると、言語によりますーって話が増えてしまう。だから本当に根本的な話。

値段を教えてくれたら、10%引きした値を計算する関、
を作ったとします。

長いので短く命名します。
こうしましょう。

「10パー引き関数」

「10パー引き関数」を使って、500円の割引計算をしてください。
「10パー引き関数」を使って、800円の割引計算をしてください。

さて、ここで必要なのは?
関数を作ると言うこと!
10パー引き関数って呼んでいるが、まずはその中身が必要。

「10パー引き関数」とは
〇〇円与えられたら、
〇〇÷10 を、〇〇から引く

なお、これを「関数を定義する」というが、嫌悪感があるなら覚えなくて良い。

とりあえず、これが関数というもの。
伝わったかがとても不安。

引数とかいうもの

言い換えが思いつかなかった。関数には引数というものがつきものだ。
輪切りには指定の野菜がなければ始まらない。そういうことだ。

関数に輪切りをお願いしたところで、野菜を与えないことには何もしてくれない。
なので、野菜を与える前提を、一緒に教えておく。

「輪切関数さん。“野菜を指定するので”輪切りにして欲しい」

言い回しに語弊があると苦しいので、少し難しいがこのまま進むと、

二つの数字を足し算して欲しい時、二つの数字を教えないことには始まらない。なので、事前に関数の「数字二つ渡しまーす!」と言っておく。

残念ながらこの書き方もさまざまなのだが、超一般化したのがこれ。

関数の名前(値1、値2)
 値1と値2の足し算をしてください

余力がある人へ

abcという名前の関数を定義する。これは、三つの数字を掛け算してくれる関数である。
引数に数値を3つ取る。以下は関数の中身である。

abc(a, b, c)
a*b*c

わかった?
苦しい。



推敲前

【第二回】(変数と条件分岐)0からプログラミングについて勉強する

前回
tsukisuke.hateblo.jp


今回は、変数と条件分岐のお話。

是非言葉で目をそらさないでほしい。
大して難しくない。

忙しい人向け

※これが理解できるならば、あとはすっ飛ばしてよし。
※余力があれば最後の章だけ見て。

変数とは

a = 2

があったとして、これはあとから書き換えが可能。

a = 2
a = 3
#最終的には「a=3」と記憶している。

つまり中身が書き換えることのできる入れ物を、変数と呼ぶ。
今回でいう a
反対の言葉もあるけど、しばらく出会うことはないと思う。

条件分岐

もし~だったらどうする?
逆にそうじゃなかったらどうする?
以下、試しに、a が 2 だったら、1 を足し、そうでなかったら 3 を足すプログラムを書いてみた。
(if と else で表現されるのが一般的)

if a is 2
 # 条件を満たす場合
 a + 1 をしてください
else
 # 条件を満たさない場合
 a + 3 をしてください

もちろん、a = 2 と教えてあれば、a + 1 をして 3 になるし、
a が 2 以外の数字なら、a + 3 をする。

以上




のんびり理解したい人向け

じっくりやろうぜ。

変数

その名の通り、変わる数のことを言う。

例えば前回のように、次のお願いをした。

a = 1

これでCPUは、 a は 1 のことなんだと覚えてくれる。

しかし、人間にも都合ってものがある。
「あ、やっぱり 2 って覚えてほしい!」と思うことがある。
そして付け足す。

a = 1
a = 2 

するとCPU様は、「 a は 1 なんだ.... いや、2 なんだ!と、覚え直してくれる。

いやはや便利。そしてここでこの言葉の登場。
a 変数 と呼ぶのだ。だって、変わることがあるから!

また、多くの言語では、 a は変数ですよと最初に教えておく。だって突然変えたらかわいそうだし。
そのため、大抵そう言う指示の書き方があるということだけ言っておく(割と言語による)


中身が変わる可能性があるからそれだけよろしく、という人間のわがままが示されていると言うこと。

それを(この場合は a のことを)変数と呼ぶ。


条件分岐

条件で分岐する=条件を教えるから、それに沿って計算を変えてね。よろしく♪

。。。例えば、最初にCPU様にこう教える。

a = 1
a = 2

CPU: a は 1 なんだ。いや、やっぱり 2 なんだ。

人間は意地悪をする。
人間:(このCPUは、本当に 2 と覚えただろうか? 試してみよう)
人間: 「もし a が 2 と覚えているのだったら、次の計算をしてみてくれ」

a + 1

人間: (これで 3 と答えたら、あっているぞ)
CPU: 3 です
人間: よかろう!!

、を、プログラム上で実行する。残念ながら細かいところはプログラミング言語によって変わってしまうのだが、だいたい共通するのが次の文章。

if (人間が指定した条件を満たしている)
 ここに書いた計算などを実行する

そう、大抵英語の if で表す。というか、難しいことをやりたいわけでもない限り、if で表現しない言語に出会うことはない。

そして便利なことに、「それ以外の時」を実行する書き方がある。else と書く。
もちろん、最初に if がないと機能しないので、else を使いたいときはこんな感じになる。

if (人間が指定した条件を満たしている)
 ここに書いた計算などを実行する
else
 それ以外の場合はこっちを実行する

else はその他であり、それ以外で在り、条件を満たしていないもの、であるのであるのである。

さて、ここで最初に戻って、
人間: 最初に a = 2 と教えて、本当に a = 2 と覚えているか、試してみよう。

a = 2 # 教える
if ( a が 2# 条件
 a + 1 # 条件に一致していればこっちが実行される
else
 a + 3 # 一致していなければこっちが実行される

さて、CPUはなんて答えるでしょうか?
考えてみてくださいな。
答えは記事の一番下に書いておきます。

あと、条件の書き方も言語によるのだけれど、それの大まかな概念はまた次の機会に。。。

以上




余力がある人へ

変数について

さっきの話を振り返れば当たり前のように感じるが、よく学習者にはこんな表現が使われる。

「後に来たものが、前の中身を上書きする」

まあ、複雑になってくると、こういう理解がいいのかもしれない。

条件分岐について

こちらには大抵「条件を満たす」という表現が使われる。
プログラムではこの条件分岐が多用される。
「現在ライフルの弾丸がないならば、リロードする、リロード中は撃てない」
そういうこと。

else は結構大事な概念で、else がないとエラーが出やすい。
人間が条件を書き忘れると、CPUは路頭に迷ってオーバーヒートする。





のんびり理解したい人向けの方へ出したさっきの問題の答え
CPU: a は 3 です

【第一回】(プログラミング言語とは)0からプログラミングについて勉強する

前回、プログラムとは何かについて書いた。
tsukisuke.hateblo.jp


「計算してくれるぜ」と言う結論だった。

今回からは、少しだけプログラミングっぽい方向に歩み寄っていく。

でも、今回も概念的なものなので、読むだけでオッケー。

プログラミング言語って何?

聞いたことがあるかないか、対象の方がどうなのか、それすらわからない。

そう、世の中にはプログラミング言語という言葉がある。

コンピュータ様の脳内

よく聞くが、コンピュータの世界には
0 か 1しかない。
本当にない。

だから僕らは、本当は、コンピュータへの全部のお願いを、0 と 1 だけで言わなければいけない。

やってられるか

ってんだ。

そして、それができるヤバい人たちが、僕らのために作ってくれたものをプログラミング言語と言う。
その名の通り、コンピュータと意思疎通をするための言語なのである。

種類がいっぱいある

コンピュータにだって文化というものがある。

日本語ネイティブの方に英語で話しかけたとして、なんとか伝えることはできようが、日本語で話した方が話は早い。

同じことで、

やって欲しいことを伝えるには、向こうが理解しやすい言語で歩み寄る必要がある

すでに 0 and 1 の世界から相手は歩み寄ってくれている。
こちらも歩み寄らなければならない。


今回の話はここまで。



ここからは余談

ちょっとこんがらがるかもしれないので、むずーと感じたら完全スキップでをお願いします。

"伝えやすい"ってどういうことだよっていう話。

ゲームを作りたいとする。しかしゲームを 0 and 1 で作るのは非現実だ。
最近のゲームを見てくれ、僕の脳すら追いつかない。

そこである人がアセンブリ言語というものを作った。
これは、0 1 に直接翻訳できる言語だ。
だが、人間には大変読みづらい。
なんたって、 0 1 の並びを簡潔にしただけなのだ。A0110とする ※これは適当です
という超直接翻訳をしただけなのだ。
無理だ。これでゲームはかけない。
※興味があれば調べて見ても….とは思はないが、面白いかもしれない。アセンブリ言語

そして、プログラミング言語はどんどん便利になっていく。

アセンブリ言語なんて知る必要もないものなのだけど、それを使って頭のいい人がもう少し人間に歩み寄ったプログラミング言語を作る。

そしてそれを使って、もっと人間に歩み寄ったプログラミング言語を誰かが作る。

それを繰り返すと、
ゲーム制作者に優しいプログラミング言語ができたぞー!!
ということになる。

もちろんゲームだけではない。流行りの、
機械学習させたいユーザー向けのプログラミング言語あるぞー!!
とか、

Webページをもっといじりたい?
ならばこれを使え!
という具合になっている。

言語ごとに何が違うのか、よくわからない。
そりゃあ僕も全部把握しているわけではないし、作った人でもないからよくわからない。

でも、理屈はわかる。
今後も読み続けてくれれば、な!