Pythonはsql文を使ってmysqlデータベースの多条件ぼかし検索の構想に対して詳しく説明します。
def find_worldByName(c_name,continent):
print(c_name)
print(continent)
sql = " SELECT * FROM world WHERE 1=1 "
if(c_name!=None):
sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
if(continent!=None):
sql=sql+" AND ( continent LIKE '%"+continent+"%') "
sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc "
# "AND continent LIKE '%%%%%s%%%%'" \
# " order by dt desc " %(c_name,continent)
# sql_temp = " SELECT * FROM world WHERE c_name LIKE '%"+c_name+"%' "
res = query(sql)
list= []
for i in res:
# print(i)
list.append(i)
return list;
背景:ページの検索ボックスは二つの検索条件があります。一つは国家で、一つは大陸です。
データベースを調べている時に問題が発生します。国から伝えられた値がNoneならANDで接続されたsql文を使うとこの条件が適用されます。
全体的にfalseと判定されます。つまりもう一つの照会条件「大陸」は無効になります。パラメータにこのようなエラーが発生するのを防ぐためです。sql語を書いています
文の場合は、パラメータが空かどうか判断条件を付けて、レイヤーごとにsql文を追加します。
考え方:
まず最初のsql文を使います。
sql = " SELECT * FROM world WHERE 1=1 "
その後、レイヤーごとにパラメータが空かどうかを判定して、sql文をつづり合わせます。
if(c_name!=None):
sql=sql+"AND ( c_name LIKE '%"+c_name+"%' )"
if(continent!=None):
sql=sql+" AND ( continent LIKE '%"+continent+"%') "
sql=sql+" AND dt=(SELECT dt FROM world order by dt desc limit 1) order by confirm desc "
もう一つの注意点があります。sql文はパラメータを伝えます。パラメータは変数です。二つの方法があります。
①直接sql文に綴り付ける:
var c_name="test"
sql_temp = " SELECT * FROM world WHERE c_name LIKE ' %"+c_name+"% '"
②プレースホルダ%を使用して、文末にプレースホルダを置換します。
sql = " SELECT * FROM world WHERE c_name LIKE '%%%%%s%%%%' AND continent LIKE '%%%%%s%%%%'" %(c_name,continent)
Tomorrow the birds will sing.
ここでPythonについてsql文を使ってmysqlデータベースの多条件ボケ検索の考え方を詳しく紹介します。Python mysql多条件ボケ検索の内容は以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。