我有一个python函数来从sqlite进行查询。如下:
def Query(X, Y, Z):
其中X,Y& Z是数据库的列。 所以例如
时Query(1, 2, 3)
它会转到sqlite,如下所示:
<code>SELECT OUTPUT FROM IMAGES WHERE (X=?) AND (Y=?) AND (Z=?)",[X,Y,Y]</code>
所以,需要数字1,2和3并将从sqlite中获取它们。 输入时我遇到的问题:
Query(X, Y, Z)
有一个或多个空字段,例如:
Query(1, 2, '')
在这种情况下,我希望数据库忽略列Z,但我无法弄清楚如何做到这一点。 我试过了
SELECT OUTPUT FROM IMAGES WHERE (X=? OR X) AND (Y=? OR Y) AND (Z=? OR Z)",[X,Y,Z]
但这句话效果不佳。
有人可以提供帮助,如果Python的输入为空,如何忽略列。
答案 0 :(得分:0)
测试空字符串可能有问题。您可以尝试类似以下内容:
"SELECT OUTPUT FROM IMAGES WHERE (X=? OR ?='') AND (Y=? OR ?='') AND (Z=? OR ?='')",[X,Y,Z]
但不可否认,这更像是一种暗示而不是实际验证的解决方案。
修改强>
您可能需要命名参数:
def Query(X, Y, Z):
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute("SELECT OUTPUT FROM IMAGES WHERE (X=:px OR :px='') AND (Y=:py OR :py='') AND (Z=:pz OR :pz='')", {"px": X, "py": Y, "pz": Z})
修改强>
试试这个sqlfiddle。
修改强>
考虑以下查询片段:
(Y=? OR Y)
对于Y ='foo'的数据库行,它等同于:
('foo'=? OR 'foo')
由于'foo'转换为false,这相当于:
('foo'=? OR false)
相当于:
('foo'=?)
只有在查询Y ='foo'时才会出现这种情况。相反,如果您查询Y ='',则得到:
('foo'='')
这显然是错误的。
因此,您的查询实际上就像原始查询一样,没有OR。