python sqlite qmark "consume" 参数
python sqlite qmark "consume" parameters
我的python代码:
datefilter="2022-01-11"
if condition:
sql="SELECT * FROM TABLE;"
else:
sql="SELECT * FROM TABLE WHERE DATE = ?;"
curs.execute(sql,(datefilter,))
当条件为真时我得到的错误:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The
current statement uses 0, and there are 1 supplied.
有没有办法在不将其用于 sql 查询的情况下“使用”此参数?
我已经尝试了以下方法,但它不起作用:
sql="SELECT * FROM TABLE; -- ?"
任何不计算为 0
的非空表达式,当用作布尔表达式时被解释为 false
,可以在任何您希望计算为 [=16] 的地方使用=].
这个查询:
SELECT * FROM TABLE;
相当于:
SELECT * FROM TABLE WHERE '2022-01-11'; -- yes, this is valid in SQLite
因为'2022-01-11'
被隐式转换为非零数值(=2022
是'2022-01-11'
的起始数字部分),所以被解释为true
,使查询等同于:
SELECT * FROM TABLE WHERE TRUE;
对于您的情况,假设您传递的参数是一个日期,以便在如上所述使用时它将始终转换为 true
,您可以编写如下代码:
datefilter="2022-01-11"
if condition:
sql="SELECT * FROM TABLE WHERE ?;"
else:
sql="SELECT * FROM TABLE WHERE DATE = ?;"
curs.execute(sql,(datefilter,))
我的python代码:
datefilter="2022-01-11"
if condition:
sql="SELECT * FROM TABLE;"
else:
sql="SELECT * FROM TABLE WHERE DATE = ?;"
curs.execute(sql,(datefilter,))
当条件为真时我得到的错误:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.
有没有办法在不将其用于 sql 查询的情况下“使用”此参数?
我已经尝试了以下方法,但它不起作用:
sql="SELECT * FROM TABLE; -- ?"
任何不计算为 0
的非空表达式,当用作布尔表达式时被解释为 false
,可以在任何您希望计算为 [=16] 的地方使用=].
这个查询:
SELECT * FROM TABLE;
相当于:
SELECT * FROM TABLE WHERE '2022-01-11'; -- yes, this is valid in SQLite
因为'2022-01-11'
被隐式转换为非零数值(=2022
是'2022-01-11'
的起始数字部分),所以被解释为true
,使查询等同于:
SELECT * FROM TABLE WHERE TRUE;
对于您的情况,假设您传递的参数是一个日期,以便在如上所述使用时它将始终转换为 true
,您可以编写如下代码:
datefilter="2022-01-11"
if condition:
sql="SELECT * FROM TABLE WHERE ?;"
else:
sql="SELECT * FROM TABLE WHERE DATE = ?;"
curs.execute(sql,(datefilter,))