このプロジェクトでは、次のようなテーブル 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 フィールドに渡し、他のインスタンスでは文字列を渡しているという事実と関係があると思います。
ヘルプや提案をいただければ幸いです。