🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

Python

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

Q&A

解決済

1回答

2068閲覧

Python内からMySQLのデータベースへINSERT INTOを用いたレコード作成ができない

baboo

総合スコア8

MySQL

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

Python

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

0グッド

0クリップ

投稿2021/01/08 07:00

前提・実現したいこと

プログラミングの勉強をかねてhtml,css,jsとpyhonで占いのようなWebアプリケーションを作ろうとしています。
その中でMySQLでデータベースを作り、適宜レコードを作成したいのですが、
pythonのスクリプト内からMySQLのINSERT INTOでレコードの送信ができないので質問させていただきます。

開発環境は手元のMacOS環境でMySQLのDL、PythonのDLを行い作業しています。
検証は

・python -m http.server 8080 --cgiでhttpサーバーの起動(?)
・その後、localhost:8080へアクセスし、占いに利用する情報入力後、htmlフォームでPOSTし、pythonスクリプトを呼び出し
・レコードが作成されるであろう挙動を行った後、mysql -u ユーザー名 -pでmysqlへログイン
・USE データベース名→SELECT * FROM テーブル名でレコードの確認

といった流れで行っています。

発生している問題・エラーメッセージ

terminalで特段エラーメッセージは出ず、Webアプリも想定した動きをしています。
またUSE データベース名やSELECTコマンドでもエラーは出ず、
同じユーザーでmysql内でINSERTを試した場合もレコードは挿入されているため、権限周りに原因があるわけでもないのかな、と思っています。

該当のソースコード

下記、python内で書いていMySQL関連の部分になります。
テーブル自体はPythonの中から作成ができています。

python

1#=====DB接続(コネクションの作成) 2conn = mydb.connect( 3 host='localhost', 4 port='3306', 5 user='tony', 6 password='tony', 7 database='tony_db' 8) 9#コネクションが切れた時に再接続してくれるよう設定 10conn.ping(reconnect=True) 11 12#=====テーブルの作成 13# DB操作用にカーソルを作成 14cur = conn.cursor() 15 16# id, name, priceを持つテーブルを(すでにあればいったん消してから)作成 17cur.execute( 18 """ 19 CREATE TABLE IF NOT EXISTS `tony_table` ( 20 `id` INT AUTO_INCREMENT PRIMARY KEY, 21 `name` VARCHAR(50), 22 `sex` ENUM('male', 'female', 'other'), 23 `birth` DATETIME, 24 `error` SET('name empty', 'sex empty', 'birth empty', 'birth invalid', 'birth outofrange', 'privacy empty', 'promise empty'), 25 `result` ENUM('tony_dis', 'tony_res'), 26 `result_num` INT, 27 `event` ENUM('share', 'page in', 'page out', 'return', 'contact', 'privacy') 28 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci 29 """) 30 31cur.execute("INSERT INTO tony_table VALUES ('4','test2','male','2021-01-01','name empty','tony_dis','1','share')")

試したこと

もともとは

cur.execute("INSERT INTO tony_table (name, sex) VALUES (%s, %s)", (name, sex))

のように指定したカラムにのみ、python内の変数を利用して値を埋めて、レコードの作成をしたかったのですが、こちらもうまくいかなかったです。
※後者のname、sexはフォームから値を取得して格納している変数です。

補足情報(FW/ツールのバージョンなど)

Python3.8.7、MySQL5.7になります。

何卒ご教示いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

自己解決

すみません・・・conn.commit()というものをする必要があるんですね・・・不勉強にて失礼いたしました

投稿2021/01/08 07:18

baboo

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問