sql >> データベース >  >> RDS >> Mysql

('SQLには0個のパラメーター・マーカーが含まれていますが、50個のパラメーターが指定されました'、'HY000')またはTypeError:'tuple'オブジェクトは呼び出し可能ではありません

    メソッドexecutemany(sql, seq_of_parameters) パラメータのセットに対して同じSQLステートメントを複数回実行します。したがって、2番目の引数seq_of_parameters 、は、単一のパラメータータプルではなく、パラメータータプルのシーケンスである必要があります:

    cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
    

    タプルを1つだけ渡すと、カーソルは最初の項目x[a]を想定します。 、はパラメータのタプルです。これは50文字の文字列であり、50個のパラメーターのシーケンスとして解釈されると思いますが、SQL文字列は2のみを想定しています。

    さらに、?を使用したことに注意してください %sの代わりにプレースホルダーシンボルとして 、後者は0個のパラメーターを予期していると報告されているため、PyODBCではサポートされていないようです。

    あなたの場合、execute()を使用することをお勧めします 反復ごとに1回だけステートメントを実行する必要があるため、ループ内のメソッド:

    cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))
    



    1. MySQLで累積合計をフェッチするための最適なクエリ

    2. SQLSELECTステートメントの列の名前変更

    3. MySQLのINTERVALおよびUTC_TIMESTAMPに相当するsqliteは何ですか?

    4. PHP/MySQLを使用してパーセンテージを計算する