MySQL-connectorを使ってInsert文を書いてみた。
formから持ってきた文字列を、そのままインサートすると上手く出来なかったので、対処法をメモ。
# 最初にやろうとしたこと。
テーブル設計はこんな感じ
+--------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | MUL | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| gender | varchar(10) | NO | | NULL | |
+--------+---------------------+------+-----+---------+----------------+
このテーブルに対して、フォームから与えられた情報をインサートしようとした。
@app.route('/users/register', methods=["POST"])
def register():
name = str(request.form.get('name')) // yamada
age = int(request.form.get('age')) // 25
gender = str(request.form.get('gender')) // male
cur.execute("INSERT INTO `users` (`id`, `name`, `age`, `gender`) VALUES (0, {name}, {age}, {gender});".format(name=name, age=age, gender=gender))
conn.commit()
return redirect(url_for('main'))
このときSQL文はこの様になる。
INSERT INTO `users` (`id`, `name`, `age`, `gender`) VALUES (0, yamada, 25, male}
しかし、文字列に対しては" "で囲って上げないといけないので、
INSERT INTO `users` (`id`, `name`, `age`, `gender`) VALUES (0, "yamada", 25, "male"}
従って、もとのインサート分はこうなる。
@app.route('/users/register', methods=["POST"])
def register():
name = str(request.form.get('name')) // yamada
age = int(request.form.get('age')) // 25
gender = str(request.form.get('gender')) // male
cur.execute("INSERT INTO `users` (`id`, `name`, `age`, `gender`) VALUES (0, '{name}', {age}, '{gender}');".format(name=name, age=age, gender=gender))
conn.commit()
return redirect(url_for('main'))
MySQL-connectorの使い方について紹介しているページ
●基本的なメソッド
投資エンジニア
●fechの使い方
Blow Up By Black Swan