1
我已經在Python以下功能:Python SQL遊標給出不同的結果?
def get_emo_results(emo, operator):
cursor.execute("SELECT avg(?) FROM [LIWC Post Stats] "
"WHERE goals_scored {0} goals_taken "
"GROUP BY post_number "
"ORDER BY post_number ASC "
"LIMIT ?".format(operator), [emo, posts_limit])
print "SELECT avg({1}) FROM [LIWC Post Stats] "\
"WHERE goals_scored {0} goals_taken "\
"GROUP BY post_number "\
"ORDER BY post_number ASC "\
"LIMIT {2}".format(operator, emo, posts_limit)
return [x[0] for x in cursor.fetchall()]
我get_emo_results('posemo', '>')
調用它,得到這個輸出到標準輸出:
SELECT avg(posemo) FROM [LIWC Post Stats] WHERE goals_scored > goals_taken GROUP BY post_number ORDER BY post_number ASC LIMIT 200
然而,函數本身返回
[0.0, 0.0, 0.0, 0.0, 0.0, ... 0.0]
我將stdout中的精確表達式複製並粘貼到我已打開的SQLite進程中,並得到以下代碼:
1.8730701754386
2.48962719298246
2.18607456140351
2.15342105263158
2.33107456140351
2.11631578947368
2.37100877192982
1.95228070175439
2.01013157894737
...
3.37183673469388
所以不是0。爲什麼我的Python函數儘管使用相同的查詢返回不同的東西?我究竟做錯了什麼?
編輯:
現在,當我擺脫了問號,直接格式化字符串工作。爲什麼在這種情況下參數化查詢不起作用?
您確定打印的語句與cursor.execute中的查詢完全相同嗎?你如何格式化字符串有一個細微的差別。 cursor.execute是否會替換每個?與列表中的相應條款? – ajon
當您通過python直接執行操作時,您是否連接到其他數據庫? – Gerrat
@ajon ahhh,你是對的,它工作時,我格式化字符串,而不是做參數化查詢... – wrongusername