Python経由でMySQLを使用して、データベース内の3つのテーブルを検索するクエリを実行しようとしています。次の文字列をクエリとして実行しようとするたびに、文字列の連結に関するエラーが発生します。
"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC"
これは私に与えるエラーです:
ValueError: unsupported format character ''' (0x27) at index 1
要求する文字を削除する場合は、%も削除する必要があります。これにより、クエリが実際に正しく動作しなくなります。私はPythonが初めてなので、これを修正するために何ができますか。
ありがとう、クリス
pythonは%をprintfのようなフォーマット文字として解釈しています。%%を使用してみてください。
"SELECT fileid
FROM files
WHERE description LIKE '%%%s%%'
OR filename LIKE '%%%s%%'
OR uploader LIKE '%%%s%%'
ORDER BY fileid DESC" % (search, search, search)
参考までに:今日、@ PochiのソリューションをPython 3.6で試してみましたが、何らかの理由で予期しない動作を引き起こしました。フォーマット文字列には2つ、3つの引数がありました最後は:
% (Search, Search)
私の文字列( "検索")は、上部の "S"で始まりました。エラーメッセージが表示されました。
ValueError: unsupported format character 'S' (0x53) at index 113
大文字を小文字に変更しましたが、エラーは次のとおりです。
TypeError: not enough arguments for format string
その後、引数の最初と最後をダブル%%の内側に入れるだけで機能しました。だから私のコードは次のように見えました:
"SELECT fileid
FROM files
WHERE description LIKE '%%search%%'
OR filename LIKE '%%search%%'
ORDER BY fileid DESC"
別の解決策は、@ Alice Yuanが提供するものです。彼女は歌の割合を2倍にしただけで、うまくいきます。
私の解決策:
query = """SELECT id, name FROM provice WHERE name LIKE %s"""
cursor.execute(query, '%%%s%%' % name)
この問題を解決する簡単な方法だと思います!
あなたはこのように試すことができます:
SELECT fileid
FROM files
WHERE description LIKE '%%%%%s%%%%'
OR filename LIKE '%%%%%s%%%%'
OR uploader LIKE '%%%%%s%%%%'
ORDER BY fileid DESC" % (search, search, search)