前提・実現したいこと
プログラミングの勉強をかねて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になります。
何卒ご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。