Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite Python和语句不工作_Python_Database_Sqlite_Execute - Fatal编程技术网

SQLite Python和语句不工作

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

我试图从SQLite数据库中提取一周中某一天和某一天某个小时的行列表。 打开sqlite浏览器并键入SQL时:

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