执行中的Python sqlite3字符串变量

问题描述 投票:0回答:5

我尝试在 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)

这将返回一个空列表。 如果我对字符串进行硬编码,它就会起作用并返回值。

python sqlite
5个回答
45
投票

参数标记只能用于表达式,即值。 您不能将它们用于表名和列名等标识符。

使用这个:

cur.execute("SELECT "+column+" FROM Data where "+goal+"=?", (constrain,))

或者这个:

cur.execute("SELECT %s FROM Data where %s=?" % (column, goal), (constrain,))

(并且在实际完成数据访问之前不要提交。)


3
投票

试试这个:

c.execute("SELECT {idf} FROM Data WHERE {goal}".\
    format(idf=column, goal=constrain))


1
投票

我决定把它放在这里,以防有人觉得它有帮助:
您可以使用Python 3的

f-strings
,如下所示:

如果要传递给 SQL 查询的变量是数字(例如整数),请使用此语法
 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)


0
投票

我今天遇到了类似的问题。我不确定这是否可以解决您的问题:

cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain,))

重要的是最后一个

尝试一下,这是我的代码的问题 - 所以也许它也对你有帮助。抱歉,无法真正解释原因,因为我刚刚自学,并且已经进入 python/sqlite 几个星期了。


0
投票

什么是均值约束?是Python变量还是什么?

© www.soinside.com 2019 - 2024. All rights reserved.