我尝试在 Python 中执行这个 sqlite3 查询。我将代码减少到最少,sqlite.connect 等有效。
column = 'Pron_1_Pers_Sg'
goal = 'gender'
constrain = 'Mann'
with con:
cur = con.cursor()
cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain))
con.commit()
rows = cur.fetchall()
for element in rows:
values.append(element)
这将返回一个空列表。 如果我对字符串进行硬编码,它就会起作用并返回值。
参数标记只能用于表达式,即值。 您不能将它们用于表名和列名等标识符。
使用这个:
cur.execute("SELECT "+column+" FROM Data where "+goal+"=?", (constrain,))
或者这个:
cur.execute("SELECT %s FROM Data where %s=?" % (column, goal), (constrain,))
(并且在实际完成数据访问之前不要提交。)
试试这个:
c.execute("SELECT {idf} FROM Data WHERE {goal}".\
format(idf=column, goal=constrain))
我决定把它放在这里,以防有人觉得它有帮助:
您可以使用Python 3的
f-strings
,如下所示: cur.execute(f"SELECT * FROM table_name WHERE column_name={integer_variable}")
cur.execute(f"SELECT * FROM table_name WHERE column_name='{string_variable}'")
''
。f-strings
与多行字符串一起使用,例如:
sql_query = f"""SELECT * FROM table_name WHERE column_name={your_variable} ... SOME MORE SQL"""
然后最后将
sql_query
传递给光标,如下:cur.execute(sql_query)
我今天遇到了类似的问题。我不确定这是否可以解决您的问题:
cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain,))
重要的是最后一个,
尝试一下,这是我的代码的问题 - 所以也许它也对你有帮助。抱歉,无法真正解释原因,因为我刚刚自学,并且已经进入 python/sqlite 几个星期了。
什么是均值约束?是Python变量还是什么?