MySQLで1366エラーメッセージ

PythonでMySQLにデータを追加しようとしたら、エラーメッセージが出力された。
Warning: (1366, “Incorrect string value: ‘\\xE3\\x81\\xBB\\xE3\\x81\\x92…’ for column ‘hogehoge’ at row 1”)

調べたところ、文字コードに問題があるようだ。
現状の文字コード。

SHOW variables LIKE '%char%';
# +--------------------------+--------------------------------+
# | Variable_name            | Value                          |
# +--------------------------+--------------------------------+
# | character_set_client     | cp932                          |
# | character_set_connection | cp932                          |
# | character_set_database   | latin1                         |
# | character_set_filesystem | binary                         |
# | character_set_results    | cp932                          |
# | character_set_server     | latin1                         |
# | character_set_system     | utf8                           |
# | character_sets_dir       | C:\xampp\mysql\share\charsets\ |
# +--------------------------+--------------------------------+

utf8に合わせることにする。
Windowsなので、my.iniファイルを編集する。

[client] 
default-character-set=utf8
[mysqld]
character-set-server=utf8

修正後、MySQLを再起動する。
再度、文字コードを確認する。

# +--------------------------+--------------------------------+
# | Variable_name            | Value                          |
# +--------------------------+--------------------------------+
# | character_set_client     | utf8                           |
# | character_set_connection | utf8                           |
# | character_set_database   | utf8                           |
# | character_set_filesystem | binary                         |
# | character_set_results    | utf8                           |
# | character_set_server     | utf8                           |
# | character_set_system     | utf8                           |
# | character_sets_dir       | C:\xampp\mysql\share\charsets\ |
# +--------------------------+--------------------------------+

my.iniの設定を変更しても相変わらずエラーがでるので更に調べたら、
テーブルのカラムごとに文字コードの照合順序があるということがわかった。
コマンドがわからなかったので、phpMyAdminからutf8_binに修正したところ、エラーがでなくなった。

Pythonのlxmlとcssselectのインストール

Webページからデータを取得するライブラリをインストールする。

> pip install lxml
> pip install cssselect

コマンドでインストール済みか確認する。

>pip list
cssselect (1.0.1)
lxml (3.8.0)

>pip freeze
lxml==3.8.0
cssselect==1.0.1

lxmlライブラリを用いて、Webページからaタグの情報を取得する。

import lxml.html

tree = lxml.html.parse('http://docs.python.jp/3/')
html = tree.getroot()

for a in html.cssselect('a'):
    print(a.get('href'), a.text)
# 出力結果
# genindex.html 索引
# py-modindex.html モジュール
# https://www.python.org/ Python
# ~略~

Python3.6.1で確認した。

MySQLのユーザに関する操作

MySQLのユーザに関する操作

# test-userユーザをパスワードなしで追加する。
CREATE USER testuser;

# パスワードありで追加する。
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password';

# 追加されたことの確認をする。
SELECT user, host FROM mysql.user WHERE user='testuser';
# +----------+-----------+
# | user     | host      |
# +----------+-----------+
# | testuser | localhost |
# +----------+-----------+

# ユーザを削除する。
DROP USER 'testuser'@'localhost';

Pythonのpipコマンドでライブラリをインストールする

Pythonのpipコマンドでライブラリをインストールする。
pipコマンドはPython3.6.1時点では最初から含まれている。

> pip -V
pip 9.0.1

Requestsライブラリをインストールする。そのあと、freezeとlistでインストールしたことを確認する。

> pip install requests
> pip freeze
requests==2.18.1
> pip list
requests (2.18.1)

Requestsライブラリが動くか確認するため、pyでPythonを起動する。
Yahooのページにリクエストをした結果、応答が200で返ってきおり、ライブラリが動いていることが確認できた。

>>> import requests
>>> r = requests.get('http://yahoo.co.jp')
>>> type(r)
<class 'requests.models.Response'>
>>> r.status_code
200

Pythonで複数行コメントを書くやり方

Pythonのコメントは#(Hash)を使う。では、複数行のときはどう書くのか調べた。
複数行のコメントをしたい場合。
‘(Single quote)か”(Double quote)を3つ並べた行で、コメントしたい行を挟めばよい。
Python3.6.1で確認した。

print(1)
'''
print(2)
print(3)
'''
print(4)
"""
print(5)
print(6)
"""

# 結果
# 1
# 4

ランダムの数値を出力する

ランダムの数値を出力するとき。
PHPの場合、mt_rand()を用いる(rand()は、すでに古いみたい)。
Pythonの場合、random()を用いる。Pythonの方は、マニュアルに色々な乱数の関数が載っていた。
セキュリティ目的で本関数を使ってはいけないと、どちらのマニュアルにも記載されていた。

echo mt_rand();
echo mt_rand(1, 100);
import random
print(random.random())
print(random.randint(1,100))

PHP5.6.28、Python3.6.1で確認した。