对于这个项目,我有一个带有表 RESULTS 的数据库文件,如下所示:
conn.execute('''CREATE TABLE RESULTS(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age TEXT NOT NULL,
gender TEXT NOT NULL);''')
这是我用来创建原型前端的文件,以便用户可以访问数据库中的数据:
#setting up the user input variables
srcIn = input("what field do you want to search: id, name, age, or gender? ")
srcQuery = input("what result do you want to find from the "+ srcIn + " search? ")
if(srcIn == "age") or (srcIn == "id"):
#by default input returns a string but it needs to be an int for age and id parameters
srcQuery = int(srcQuery)
print("converted to int")
srcOut = input("what field do you want to return: id, name, age, or gender? ")
print("making cursor")
cursor = conn.execute("SELECT %s FROM RESULTS WHERE %s = %s" % (srcOut, srcIn, srcQuery))
for row in cursor:
print(srcOut + ": " + row[0])
conn.close()
print("closed database " + db)
如果我要运行它并传递年龄或 id、数字 45 和名称,它将完美地从我的数据库中返回名称、性别和其他统计信息。但是,当我传递性别、女性或男性并返回名称或年龄或 ID 时,会弹出一个错误,如下所示:
cursor = conn.execute("SELECT %s FROM RESULTS WHERE %s = %s" % (srcOut, srcIn, srcQuery))
sqlite3.OperationalError: no such column: male
对于这个具体的例子:
srcOut = name
srcIn = gender
srcQuery = male
我尝试将 %s 替换为 ? 参数(我知道它不适用于我传递给 SELECT 语句的参数),所以我很难过。
我认为这与以下事实有关:在某些情况下,我在 srcQuery 字段中将整数传递给它,而在其他情况下,我将其传递给字符串。
任何帮助或建议将不胜感激。