执行中的Python sqlite3字符串变量

zour9fqk  于 2023-03-13  发布在  SQLite
关注(0)|答案(4)|浏览(171)

我试着用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)

这将返回一个空列表。如果我硬编码字符串,它将工作并返回值。

brccelvz

brccelvz1#

参数标记只能用于表达式(即值)。不能用于表名和列名等标识符。
使用此命令:

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

或者这个:

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

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

d7v8vwbk

d7v8vwbk2#

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

ws51t4hk

ws51t4hk3#

我决定把这个放在这里,以防有人觉得有帮助:
你可以使用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)

wr98u20j

wr98u20j4#

我今天也遇到了类似的问题。我不确定这是否能解决你的问题:

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

重要的是最后一个**,**
给予一试,这是我的代码的问题-所以也许它对你也有帮助。抱歉,不能真正解释原因,因为我刚刚学习自己,并进入Python/SQLite几个星期。

相关问题