2011-03-01 69 views
1

我試圖從SQLite數據庫中的一週中的某一天和當天的某個小時拉出行的列表。 當我打開我的SQLite瀏覽器並輸入SQL:SQLite Python和語句不工作

SELECT * FROM points 
WHERE strftime('%H', checkintime) == '12' 
    AND strftime('%w', checkintime) == '1' 

它的工作原理和我收到的所有我應該接受行。 然而,當我試圖做到這一點在Python:

_points.execute("""SELECT * FROM points WHERE strftime('%H', checkintime) == ? AND strftime('%w', checkintime) == ?""", (time, day)) 

,時間是12日和1是我得到的結果爲零返回。 更奇怪的是,當我更改execute語句以使用硬編碼值時,它可以工作。

我試圖將我的變種字符串轉換爲字符串和整數,但它仍然是不行。 :(

有什麼建議?

回答

0

如何處理執行調用之外的字符串格式?例如,

sql_statement = """SELECT * FROM points WHERE strftime('%s', checkintime) == %s AND strftime('%s', checkintime) == %s""" % ('%H', time, '%w', day) 

_points.execute(sql_statement) 

這應該避免執行語句無法完成的字符串映射。

祝你好運!

1

我想你有你的號碼參數轉換爲字符串,否則如你在發言中的sqlite這麼做,他們將不會被引用,與變量替換?不報價。數字

你實際上是比較字符串,因此,必須將參數轉換爲字符串

+0

我試圖將它們轉換爲使用str(日)等字符串,但沒有運氣。 '_points.execute(「」「SELECT * FROM points WHERE strftime('%H',checkintime)==?AND strftime('%w',checkintime)==?」「」,(str(time),str )' – 2011-03-01 17:29:52

0

嘗試這樣的: _points.execute( 「」「SELECT * FROM點中的strftime( '%H',checkintime )==?和strftime('%w',checkintime)==?「」「」(時間,日))

講究%(時間,日)

我不能確定%H和%W,不知道是什麼時間和日期的格式是

+0

ValueError:索引爲38時不支持的格式字符'H'(0x48) – 2011-03-01 17:28:40

1

時間和日期值必須是字符串。另外,我想知道你的'%'是否需要轉義(使用%%) - 有可能在pysqlite中,?佔位符轉換爲%風格,然後你的%H和%w被誤解。以下工作?

_points.execute("""SELECT * FROM points WHERE strftime('%%H', checkintime) == ? AND strftime('%%w', checkintime) == ?""", (str(time), str(day))) 
+0

(1)「(或者您需要引號在您的查詢字符串中)」是模糊的和/或異端 - 請解釋。 (2)佔位符不會轉換爲%樣式。一個SQL字符串文字中的佔位符字符不是一個佔位符......在'select'Huh ??',foo from bar where zot =?',只有最後一個'?'是一個佔位符。 – 2011-03-01 11:56:32

+0

不,這是行不通的%% H或%H工作:(我真的不覺得這是可能的escpaing正在發生這樣的事情,B/C所有我需要做的是用'2'替換?作品。 – 2011-03-01 17:27:21

+0

@約翰:(1)好點!編輯。(2)我的意思是,如果Python%格式化在替換佔位符的某個時候完成,那麼%s將需要轉義。過去我曾經遇到過這種情況,儘管使用pymssql檢查我的舊代碼:每當有佔位符時,我必須說'... like'prefix %%'。 – 2011-03-01 18:10:03