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

パラメータが1つしかないMySqlcursors.execute():文字列がリストにスライスされるのはなぜですか?

    問題は、('hello') 文字列であり、('hello',) タプルです 。プレースホルダーの値として、常にタプル(またはリストなどの他のコレクション)を渡す必要があります。その理由は、プレースホルダーがポジショナルであるためです。 クエリでは、引数にも順序が必要です。タプルとリストは、オブジェクトの順序付き選択を取得する2つの方法です。

    タプルまたは他のコレクションを想定しているため、106 [1, 0, 6]に変換されます 。 (106,)を渡した場合 、正しく解釈されます。

    舞台裏では、これが起こっていることです:

    >>> for i in '106':
    ...     print(i)
    ...
    1
    0
    6
    >>> for i in ('106',):
    ...    print(i)
    ...
    106
    

    したがって、「ハック」は実際には正しい解決策であり、追加の変数は必要ありません。

    q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
    cursor.execute(q, (idProduct,))
    



    1. mysql_fetch_arrayはすべての行を取得するわけではありません

    2. Mysqlでの英数字の順序

    3. エラー1118(42000)行サイズが大きすぎます

    4. PostgreSQL9.0でのPgbouncerを使用した接続プール