SQLite Python和语句不工作
我试图从SQLite数据库中提取一周中某一天和某一天某个小时的行列表。 打开sqlite浏览器并键入SQL时:SQLite Python和语句不工作,python,database,sqlite,execute,Python,Database,Sqlite,Execute,我试图从SQLite数据库中提取一周中某一天和某一天某个小时的行列表。 打开sqlite浏览器并键入SQL时: SELECT * FROM points WHERE strftime('%H', checkintime) == '12' AND strftime('%w', checkintime) == '1' 它工作,我收到所有我应该收到的行。 但是,当我尝试在python中执行此操作时: _points.execute("""SELECT * FROM points WHERE st
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语句更改为使用硬编码值时,它就工作了
我已经尝试将我的变量同时输入字符串和整数,但这仍然是不可能的
有什么建议吗?我认为您必须将数字参数转换为字符串,否则它们不会像您在sqlite中的语句中那样被引用。变量替换?不引用数字 您实际上是在比较字符串,因此必须将参数转换为字符串。尝试如下操作: _points.executeSELECT*从strftime“%H”,checkintime==?并且strftime“%w”,checkintime==?%time,day 注意%的时间,天
我不确定%H和%w的格式,不知道时间和日期格式是什么时间和日期值确实需要是字符串。另外,我想知道您的“%”是否需要用%%转义-有可能在pysqlite中?占位符被转换为%-样式的占位符,然后您的%H和%w被误解。下面的方法有效吗
_points.execute("""SELECT * FROM points WHERE strftime('%%H', checkintime) == ? AND strftime('%%w', checkintime) == ?""", (str(time), str(day)))
在execute调用之外处理字符串格式如何?比如说,
sql_statement = """SELECT * FROM points WHERE strftime('%s', checkintime) == %s AND strftime('%s', checkintime) == %s""" % ('%H', time, '%w', day)
_points.execute(sql_statement)
这应该避免execute语句无法完成的字符串映射
祝你好运 1或者您需要在您的查询字符串中引用晦涩和/或异端邪说-请解释。2占位符不会转换为样式占位符。SQL字符串文字中的占位符字符不是占位符。。。在选择'Huh??'中,从zot=?,仅最后一个?是一个占位符。不,这不起作用%%H或%H也不起作用:而且我真的不觉得这样做是可能的,b/c我所需要做的就是替换?用“2”就行了。@John:1说得好!编辑。2我的意思是,如果在替换占位符时在某个点完成Python%格式化,那么%s将需要转义。我过去也曾遇到过这种情况,尽管我用pymssql检查过我的旧代码:每当有占位符时,我都会说“…像”prefix%%“。ValueError:索引38处不受支持的格式字符“H”0x48我试图使用strday等将它们转换为字符串,但没有成功_points.executeSELECT*从strftime“%H”,checkintime==?和strftime“%w”,checkintime==?,strtime,strday