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

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

詳細はこちら
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MySQL

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

4774閲覧

TypeError: first argument must be string or compiled pattern というエラーが発生してhtmlが表示されず困っています。

haruchan__

総合スコア7

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MySQL

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/01/01 02:11

編集2021/01/01 03:20

pythonとmysqlを使用して簡単なデータベースの中を検索できるwebアプリケーションを作成使用としています。そのなかで、下記のようなエラーが発生してhtmlが表示されなくなり困っています。

例 htmlにて検索した文字列を入力

データベースのデータをpandasのdfにして文字列でソート

結果をhtmlに返して表示する

環境
使用言語:python 3.9.1
データベース:mysql 5.6.x
フレームワーク:flask

エラーコード TypeError: first argument must be string or compiled pattern

どのようにすれば、mysqlから引っ張ってきたデータとhtmlからの入力で検索してその結果をhtmlに返して表示できるのでしょか?
ご教示お願い致します。

やった事
search_nameをintにする
get方法をgetlistに変更
dbからの読み取りを*からshimeiに変更

work13.py

1import mysql.connector as mydb 2import pandas as pd 3from flask import Flask, render_template, request, redirect 4from flask_sqlalchemy import SQLAlchemy 5 6#データベースとの接続 7conn = mydb.connect( 8 host='localhost', 9 port='3306', 10 user='root', 11 password='root', 12 database='shain' 13) 14 15sql = "select * from shain" 16 17#テーブルからデータを取得してデータフレームに 18df_shain_list = pd.read_sql(sql, conn) 19 20app = Flask(__name__) 21""" 22app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8'.format(**{ 23 'user': 'root', 24 'password': 'root', 25 'host': '3306', 26 'db_name': 'shain' 27 }) 28""" 29#db = SQLAlchemy(app) 30@app.route('/', methods=['GET', 'POST']) 31def search(): 32 if request.method == 'GET': 33 #posts = Post.query.all() 34 return render_template('search.html') 35 36 else: 37 search_name = request.form.get('keyword') 38 n = 0 39 result = df_shain_list[df_shain_list['shimei'].str.contains(search_name)] #search_nameを含んだデータを抽出 40 result_shimei = result['shimei'] 41 for index, row in result.iterrows(): 42 result_shimei = row['shimei'] 43 n = n + 1 44 if search_name == '': #何も入力されていない場合 45 result_word = (f'全社員の人数は{n}人です。') 46 elif n > 0: #該当者がいる場合 47 result_word = (f'名前に「{search_name}」が含まれるのは{n}人です。') 48 elif n == 0: #該当者がいない場合 49 result_word = (f'名前に「{search_name}」が含まれる人はいませんでした。') 50 51 print(result_word) 52 53 #due = datetime.strptime(due, '%Y-%m-%d') 54 #new_post = Post(title=title, detail=detail, due=due) 55 return render_template('result.html', result_word = result_word) 56 57@app.route('/result', methods=['GET', 'POST']) 58def result(): 59 return render_template('result.html') 60 61if __name__ == "__main__": 62 app.run(debug=True)
エラーの原因かと思われる場所 result = df_shain_list[df_shain_list['shimei'].str.contains(search_name)] #search_nameを含んだデータを抽出

resul.html

1resul.html 2 3{% extends 'base.html' %} 4 5{% block body %} 6<p>{{result_word}}</p> 7{% endblock %}

search.html

1search.html 2 3{% extends 'base.html' %} 4 5{% block body %} 6<p>検索したい名前を入力してください。</p> 7{% endblock %}

base.html

1base.html 2 3<!DOCTYPE html> 4<html lang="ja"> 5 6<head> 7 <meta charset="UTF-8"> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 9 <title>社員検索</title> 10 {% block head %}{% endblock %} 11</head> 12 13<body> 14 <h3>社員管理システム</h3> 15 <form method="post" action="/result"> 16 検索条件 17 <input type="text" name="keyword"><br> 18 <input type="submit" value="検索する"> 19 </form> 20 {% block body %}{% endblock %} 21</body> 22 23</html>

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

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

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

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

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

guest

回答1

0

自己解決

formのデータの取得の仕方が間違ってました。

元々 @app.route('/result', methods=['GET', 'POST']) def result(): return render_template('result.html')
変更 @app.rutte('/')を削除して何もしないようにし、下記のようにへんこう @app.route('/result', methods=['POST']) def result(): search_name = request.form['keyword'] n = 0 result = df_shain_list[df_shain_list['shimei'].str.contains(search_name)] #search_nameを含んだデータを抽出 result_shimei = result['shimei'] for index, row in result.iterrows(): result_shimei = row['shimei'] n = n + 1 if search_name == '': #何も入力されていない場合 result_word = (f'全社員の人数は{n}人です。') elif n > 0: #該当者がいる場合 result_word = (f'名前に「{search_name}」が含まれるのは{n}人です。') elif n == 0: #該当者がいない場合 result_word = (f'名前に「{search_name}」が含まれる人はいませんでした。') return render_template('result.html', result_word = result_word)

投稿2021/01/01 06:34

haruchan__

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問