2

MySQLに少し問題があります。クリックスルーを記録し、リダイレクトを処理するPythonスクリプトを作成しました。特定のIPアドレスに対して、IDのリストを含む列を含むさまざまな列があるテーブルがあります。ユーザーが画像をクリックしたことがない場合(行は引き続き存在します)、セルには空のリストが含まれます。

リストは、テーブルで更新される前にjsonを使用して文字列としてシリアル化されることに注意してください。これは必ずしも良い習慣ではないことは知っていますが、私たちのアプリケーションではうまくいくようです。

したがって、ユーザーが画像をクリックする前に、SQLテーブルを照会できます。

    sql = """select clicked_id from `""" + DBTABLE2 + """`
            where ip='%s'"""%(ip_address,)     
    cur.execute(sql)
    row = cur.fetchone()
    if row:
        ci = row['clicked_id']
        print ci, type(ci)

        clicked_id=json.loads(ci)
        print clicked_id, type(clicked_id)

printステートメントは次を返します。

    []  <type 'str'>
    []  <type 'list'>

ただし、次のpythonスクリプト(正常に実行されます)を実行すると、出力は完全に異なります。Pythonコードは次のとおりです。

#connecting to the mysql table
con = mysql.connect(host=DBHOST, user=DBUSERNAME, passwd=DBPASSWORD,
                db=DBDATABASE, cursorclass=DictCursor)
cur = con.cursor()

#save the click through
sql = """select clicked_id from `""" + DBTABLE2 + """`
                where ip='%s'"""%(ip_address,)     
cur.execute(sql)
row = cur.fetchone()
if row:
    clicked_id = row['clicked_id']

    #decoding the data
    clicked_id = json.loads(clicked_id)

else:
    clicked_id=[]

#Updating the list
clicked_id = clicked_id.append(product_id)

#Encoding the data
clicked_id = json.dumps(clicked_id)

#Updating the mysql database
cur.execute("""update `"""+DBTABLE2+"""` set clicked_id='%s' where ip='%s'"""%(clicked_id,ip_address,))

#Getting the dst url
sql = """select url from `""" + DBTABLE + """`
                where id='%s'"""%(product_id,)
cur.execute(sql)
row = cur.fetchone()

if row:
    url = row['url']

テーブルを再度確認すると、printステートメントは次を返します。

 null  <type 'str'>
 None  <type 'NoneType'>

なぜこれが行われているのかわかりません...助けていただければ幸いです。

4

1 に答える 1

0

Python スクリプトには、次のような問題があります。

    #Updating the list
    clicked_id = clicked_id.append(product_id)

これは正しくなく、clicked_id に NoneType を指定します。これは、MySQL にロードされると null 値として解釈されます。

コードを次のように更新するだけです。

    clicked_id.append(product_id)
于 2013-01-08T15:59:09.230 に答える