質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

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

Python

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

Q&A

解決済

3回答

2898閲覧

意味不明のInvalid Syntax

Pablito

総合スコア71

MySQL

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

Python

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

0グッド

1クリップ

投稿2019/06/18 05:59

編集2019/06/18 08:02

前提・実現したいこと

PythonとMySQLを接続し、
Pythonで作成したウェブアプリの
検索履歴をMySQLの上で
閲覧したいと思っています。
(使用教材:Head First Python)

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

コードを書き終わり実行しようとするとき、

File "Hello.py", line 23 conn.commit() ^ SyntaxError: invalid syntax

というメッセージが表示され、
エラーが起きました。
しかし、自分としてはこのコードの前に
教材通りにコードを書いており、
なぜ無効なのかわかりません。

該当のソースコード

Python

1from flask import Flask, render_template, request, escape 2from vsearch import search4letters 3 4app = Flask(__name__) 5 6def log_request(req: 'flask_request', res: str) -> None: 7 dbconfig = {'host': '127.0.0.1', 8 'user': 'vsearch', 9 'password': 'vsearchpasswd', 10 'database': 'vsearchlogDB',} 11 import mysql.connector 12 conn = mysql.connector.connect(**dbconfig) 13 cursor = conn.curosr() 14 _SQL = """insert into log 15(phrase, letters, ip, browser_string, results) 16values 17(%s, %s, %s, %s, %s, %s)""" 18 cursor.execute(_SQL, (req.form['phrase'], 19 (req.form['letters'], 20 req.remote_addr, 21 req.user_agent.browser, 22 res,)) 23 conn.commit() 24 conn.close() 25 cursor.close() 26 27@app.route('/search4', methods=['POST']) 28def do_search() -> 'html': 29 """Extract the posted data; perform the search; return results.""" 30 phrase = request.form['phrase'] 31 letters = request.form['letters'] 32 title = 'Here are your results:' 33 results = str(search4letters(phrase, letters)) 34 log_request(request, results) 35 return render_template('results.html', 36 the_title=title, 37 the_phrase=phrase, 38 the_letters=letters, 39 the_results=results,) 40 41 42@app.route('/') 43@app.route('/entry') 44def entry_page() -> 'html': 45 """Display this webapp's HTML form.""" 46 return render_template('entry.html', 47 the_title='Welcome to search4letters on the web!') 48 49 50@app.route('/viewlog') 51def view_the_log() -> 'html': 52 """Display the contents of the log file as a HTML table.""" 53 contents = [] 54 with open('vsearch.log') as log: 55 for line in log: 56 contents.append([]) 57 for item in line.split('|'): 58 contents[-1].append(escape(item)) 59 titles = ('Form Data', 'Remote_addr', 'User_agent', 'Results') 60 return render_template('viewlog.html', 61 the_title='View Log', 62 the_row_titles=titles, 63 the_data=contents,) 64 65 66if __name__ == '__main__': 67 app.run(debug=True) 68

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

Python3.7
MySQL8.0

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

意味不明とはどういう意味か。

cursor.execute(_SQL, (req.form['phrase'], (req.form['letters'], req.remote_addr, req.user_agent.browser, res,)) conn.commit() conn.close() cursor.close()

教材で、req.form['letters']の前に括弧が付いてますか?
conn.commit() conn.close() cursor.close() の行のインデントがぱっと見ておかしくありませんか?


追記

教本は

cursor.execute(_SQL, (req.form['phrase'], req.form['letters'], 略

となっていませんか? (推測として)

投稿2019/06/18 08:26

編集2019/06/18 23:59
quickquip

総合スコア11029

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

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

Pablito

2019/06/18 08:38 編集

quiquiさん、 ご回答ありがとうございます。 確かに教材には()は入っております。 また、参考までに以下のようにインデントを修正してみたのですが、 結果は同じでした。 cursor.execute(_SQL, req.form['phrase'], (req.form['letters'], req.remote_addr, req.user_agent.browser, res,) conn.commit() conn.close() cursor.close()
quickquip

2019/06/18 09:16

cursor.execute(_SQL, req.form['phrase'], の行の記載が質問から変わりました。どうしてでしょう
quickquip

2019/06/18 09:16

req.form['letters']の前に括弧が付いてますか?
Pablito

2019/06/19 02:41

教材ではついていますが、 一度外して実行しました。 結果は変わらずでしたので、 もう一度かっこをつけました。
quickquip

2019/06/19 02:43

追記したところを見てください。req.form['letters']とreq.form['phrase']の区別がついてないのではないかと心配しています。
Pablito

2019/06/19 02:56

すいません。 req.form['phrase']の ところばかり見ていました。 確認し、削除したところ、 そこのエラーは消えまして、 別の部分を修正したとこと 一応動きました。 まだ、動かしたウェブアプリ上では mysql.connector.errors.ProgrammingError mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'vsearch'@'localhost' というが起きるのですが、 これはまた別件で 解決を目指します。 ありがとうございました。
guest

0

エラー発生行の上のres,))、カッコの数が合っていないようです。

投稿2019/06/18 08:57

can110

総合スコア38233

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

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

0

教材どおりじゃないと思われる箇所

cursor = conn.curosr()

投稿2019/06/18 08:15

yukky1201

総合スコア2751

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

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

Pablito

2019/06/18 08:39

yukky1201さん、 ご指摘ありがとうございます。 その通りです。 修正致しました。 しかし、結果は同じでした... 難しい(´;ω;`)
yukky1201

2019/06/18 08:55

ほかにも、パラメータ指定の箇所で「~,~,~,~,)」のようにカンマで終わってる箇所など気になるので、教材と一言一句相違ないか確認してみてください。
Pablito

2019/06/19 02:31

承知いたしました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問