3

mysql.connectorpyCharmで実行してPython 2.7を使用しています

ここここに示すようなパラメーター化されたクエリを使用する必要があります

これらの例を考えるとcursor.execute("SELECT * FROM automatedReports WHERE pythonFunctionName = %s", (function_name))、以下のように動作するはずです。

ただし、pyCharm でこの行を記述すると、次のエラーが発生します。

ここにコードを入力してください

検査は次のように述べています。

ここに画像の説明を入力

コードを実行すると、次のエラーが発生します。

SQL 構文にエラーがあります。1 行目の '%s' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

完全なコードは次のとおりです。

class DatabaseManager():
    def get_report_settings_for_function_named(self, function_name):
        """
        Get the settings for a given report from the database based on the name of the function that was called
        to process the report

        This is how we get the, email subject and email addresses to send the report to

        :param function_name: The name of the function that was called to process the report
        :type function_name: str.
        :returns:  array -- the settings row from the database.

        """
        cnx = mysql.connector.connect(**config)
        cursor = cnx.cursor(dictionary=True)

        cursor.execute("SELECT * FROM automatedReports WHERE pythonFunctionName = %s", (function_name))

        row = cursor.fetchone()
        cursor.close()
        cnx.close()

        print cursor.statement

        return row

print DatabaseManager().get_report_settings_for_function_named('process_elation_credit_report')

ここで何が間違っていますか?これは古い構文ですか?私はそうは思わないでしょう...

クエリ文字列に値を入力すると、すべて正常に機能しますが、パラメーターを使用できないことに注意してください。

4

1 に答える 1

5

取得するエラーは、クエリを実行しようとしたときに mysql からのものです。渡されるクエリ パラメータはcursor.execute()タプルである必要があります。単一の値を渡します。要素が 1 つのタプルを作成するには、要素の後にコンマを追加する必要があります。

cursor.execute("SELECT * FROM automatedReports WHERE pythonFunctionName = %s", (function_name,))

それ以外の場合mysql.connectorは何もエスケープせず、リテラル%sをクエリに残します。

于 2016-10-16T12:57:55.597 に答える