2

このコードは昨日正常に機能し、cronジョブとして実行されていました。突然、今日はそうではなく、私はこのエラーを受け取ります:

    Traceback (most recent call last):
  File "C:/Users/ac33g1r1/Documents/BD_Scripts/test plist script.py", line 28, in <module>
    [plist[sid], lastQ[0]] )
  File "C:\Python33\pymysql\cursors.py", line 117, in execute
    self.errorhandler(self, exc, value)
  File "C:\Python33\pymysql\connections.py", line 187, in defaulterrorhandler
    raise Error(errorclass, errorvalue)
pymysql.err.Error: (<class 'TypeError'>, TypeError("'int' does not support the buffer interface",))

私は検索しましたが、なぜこれが突然変わったのか理解できません。PythonのバージョンはWindowsServer2008では3.3.0です。このcronジョブを再び機能させたいのですが、実際の原因はわかりません。

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

import pymysql

conn = pymysql.connect(host='1.2.3.4', port = 1234, user = 'uname',  passwd='pword', db='db_x')
cur = conn.cursor()

lastQ = [165]
plist = [3327, 2145, 3429, 3442, 2905, 3339, 2628, 1655, 1831, 3202, 2551, 2110]

###Debug statements
print("plist")
print(len(plist))
print ("\n")

print("last[Q]")
print(lastQ[0] )
print ("\n")
lastQ[0] = lastQ[0] + 1
print(lastQ[0] )

# Code that is throwing error

for sid in range(len(plist)):
   lastQ[0] = lastQ[0] + 1
   cur.execute("""INSERT INTO queuelist(itemID, sortID)
               VALUES(%s,%s)""",
               [plist[sid], lastQ[0]] )

cur.close()
conn.close()
4

2 に答える 2

1

64ビットのWindows 7でも同様の問題があり、この回避策が役に立ちました. pymysqlのconnections.pyunpack_int24、unpack_int32、および unpack_int64関数を置き換えるだけです。

def unpack_int24(n):
    try:
        return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0] << 8) +\
            (struct.unpack('B',n[2])[0] << 16)
    except TypeError:
        return n[0]+(n[1]<<8)+(n[2]<<16)

def unpack_int32(n):
    try:
        return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0] << 8) +\
            (struct.unpack('B',n[2])[0] << 16) + (struct.unpack('B', n[3])[0] << 24)
    except TypeError:
        return n[0]+(n[1]<<8)+(n[2]<<16)+(n[3]<<24)

def unpack_int64(n):
    try:
        return struct.unpack('B',n[0])[0] + (struct.unpack('B', n[1])[0]<<8) +\
        (struct.unpack('B',n[2])[0] << 16) + (struct.unpack('B',n[3])[0]<<24)+\
        (struct.unpack('B',n[4])[0] << 32) + (struct.unpack('B',n[5])[0]<<40)+\
        (struct.unpack('B',n[6])[0] << 48) + (struct.unpack('B',n[7])[0]<<56)
    except TypeError:
        return n[0]+(n[1]<<8)+(n[2]<<16)+(n[3]<<24) \
              +(n[4]<<32)+(n[5]<<40)+(n[6]<<48)+(n[7]<<56)
于 2014-04-28T08:58:28.887 に答える
0

Python または pymysql をアップグレードしましたか?

pymysql の問題リストを見ると、Python 3 で使用した場合に似たようなさまざまな既知の問題があることがわかります。Python 3 のバイト配列と文字列の違いにより、pymysql/connections.py の unpack_* 関数が正しく機能しません。問題の説明と回避策の例については、http://code.google.com/p/pymysql/issues/detail?id =55#c3 を参照してください。

于 2013-01-07T17:54:14.867 に答える