2011-03-01 36 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