Python3动态sqlite选择查询

Python3动态sqlite选择查询,python,sqlite,Python,Sqlite,我正在努力复制sqlite SELECT查询 sqlite> select "de-515" from balances where id = '1'; de-515 0.1 sqlite> sqlite没有任何问题,但是当我尝试将此查询构建到python脚本中时,我所做的一切似乎都不起作用。我尝试了以下方法,目的是将python变量设置为上面看到的0.1值 elementBalQuery = 'SELECT "%s" FROM balanc

我正在努力复制sqlite SELECT查询

sqlite> select "de-515" from balances where id = '1';
de-515
0.1
sqlite>
sqlite没有任何问题,但是当我尝试将此查询构建到python脚本中时,我所做的一切似乎都不起作用。我尝试了以下方法,目的是将python变量设置为上面看到的0.1值

elementBalQuery = 'SELECT "%s" FROM balances WHERE id="%s"'
cursor.execute(elementBalQuery, (elementName,userId))
curBal = cursor.fetchall()
print("curBal = ", curBal)
这导致

Traceback (most recent call last): 
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 2 supplied.
这也是失败的

cursor.execute("SELECT %s FROM balances WHERE id=?", % (elementName), (userId))

cursor.execute("SELECT %s FROM balances WHERE id=?", % (elementName), (userId))
SyntaxError: invalid syntax
我尝试了其他几种方法来构建这个查询,但无法找出我遗漏了什么。我来自bash的背景,在那里我可以轻松地将var设置为等于sqlite查询的输出


如何使用动态查询选择使用变量名的行?

您需要将字符串格式和参数替换结合起来,以创建一个可以安全执行的查询

Sqlite对值占位符使用问号 和标识符的双引号。看见 https://www.sqlite.org/lang_keywords.html sql='从id=?'的余额中选择%s' 使用字符串格式%、.format、f-string添加列名 sql=sql%列名称 使用参数替换添加值,以确保正确引用值 结果=cursor.executesql,1, 值占位符有一种替代形式

sql='从id=:id的余额中选择%s' sql=sql%列名称 结果=cursor.executesql,{'id':1}
您需要结合使用字符串格式和参数替换来创建可以安全执行的查询

Sqlite对值占位符使用问号 和标识符的双引号。看见 https://www.sqlite.org/lang_keywords.html sql='从id=?'的余额中选择%s' 使用字符串格式%、.format、f-string添加列名 sql=sql%列名称 使用参数替换添加值,以确保正确引用值 结果=cursor.executesql,1, 值占位符有一种替代形式

sql='从id=:id的余额中选择%s' sql=sql%列名称 结果=cursor.executesql,{'id':1}
按如下方式定义查询:

query = f'''SELECT {elementName} FROM {tableName} WHERE id={userId}'''
然后:

cursor.execute(query)
应在构造查询之前指定参数


请注意,python2中不支持这种格式设置。请按如下方式定义查询:

query = f'''SELECT {elementName} FROM {tableName} WHERE id={userId}'''
然后:

cursor.execute(query)
应在构造查询之前指定参数


请注意,python2不支持这种格式。下面的答案也有效,我可以使用游标。executeSELECT+elementName+FROM balances,其中id=?,userId。我发现的另一个问题是,一些elementName条目中有一个连字符,我认为脚本不喜欢。rf-431我从数据库中删除了所有hypens并使其工作,感谢所有人的及时回答。

下面的答案也起了作用,我能够使用游标使其工作。executeSELECT+elementName+from balances,其中id=?,userId我发现的另一个问题是,一些elementName条目中有一个连字符,我认为脚本不喜欢这个连字符。rf-431我从数据库中删除了所有hypens,并使其正常工作,感谢所有人的及时回复。

我正在使用python3。由于某种原因,当我尝试此操作时,会出现语法错误。sqlite3.OperationalError:near:syntax error我的确切实现是:balQuery=f'SELECT{elementName}FROM balances WHERE id={userId}'谢谢,让我来调查一下更多我实际上用cursor.executeSELECT+elementName+FROM balances WHERE id=?,userIdI正在使用python3。由于某种原因,当我尝试此操作时,会出现语法错误。sqlite3.OperationalError:near:syntax error我的确切实现是:balQuery=f'SELECT{elementName}FROM balances WHERE id={userId}'谢谢,让我来调查更多我实际上让它使用cursor.executeSELECT+elementName+FROM balances WHERE id=?,userId