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

executemany()で行を挿入するときの無効なパラメータータイプ(numpy.int64)

    問題は、データの量自体ではありません 、一部のタプルにnumpy.int64が含まれている可能性があります SQLステートメントのパラメーター値として直接使用できない値。たとえば、

    a = numpy.array([10, 11, 12], dtype=numpy.int64)
    params = (1, 1, a[1], 1, 1, 1)
    crsr.execute(sql, params)
    

    投げます

    3番目のパラメーター値はnumpy.int64であるため numpy配列の要素a 。その値をint()で変換する 問題を回避します:

    a = numpy.array([10, 11, 12], dtype=numpy.int64)
    params = (1, 1, int(a[1]), 1, 1, 1)
    crsr.execute(sql, params)
    

    ちなみに、その理由

    sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
    cursor.execute(sql)
    

    動作しなかったのは、max_allowed_packet は、MicrosoftSQLServerにとって意味のないMySQL設定です。



    1. MySQLに中国語の文字を挿入できません

    2. SQLAlchemyを介してPostgresqlで複数のステートメントを実行しても、変更は永続化されません

    3. フィールド値に基づいて一意の制約を追加します

    4. SQLServerモニタリングの総所有コストを計算する