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>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。