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'>
なぜこれが行われているのかわかりません...助けていただければ幸いです。