有没有一种方法可以使用read_sql_query并且查询的WHERE列=变量?

时间:2019-10-17 14:27:47

标签: python pandas sqlite tkinter

我想创建一个数据框,该数据框从不断更新的另一个表中读取数据,并仅选择包含与用户输入的产品代码相同的产品代码的行

我已经尝试过

pd.read_sql_query

创建数据框

这是我尝试过的代码,将其视为sqlalchemy语法,但我不知道为什么

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = ?",(Val), c)

其中Val是一个单项元组,用于存储用户输入的产品代码的值,而StoringTF是我要从中提取数据的主表。

我希望您对我想做的事情有所了解,因为语法有问题,并且使python期望它是sqlalchemy。 谢谢,希望能为您提供帮助。

5 个答案:

答案 0 :(得分:1)

使用pyformat,您可以这样编写

>>> x
[1, 2, 3]
>>> next((x for x in x if x > 20), 0) # if no number > 20 is found, return 0
0

按照某些答案中的建议在python中格式化字符串,这为SQL注入或变量中某些特殊字符引起的错误提供了机会。

答案 1 :(得分:0)

您可以:

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = %s" % str(your_variable), c)

答案 2 :(得分:0)

您可以尝试

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = {}".format(Val), c)

答案 3 :(得分:0)

您的原始代码有一个错误,即(Val)不是1元素元组。

您可以查看How to create a tuple with only one elementPython documentation了解更多详细信息。

您的原始代码应该可以加上一个逗号,即:

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = ?",(Val,), c)

答案 4 :(得分:-1)

如果您使用的是python 3.6或更高版本,那么最有效的字符串处理方法就是“ f-strings”,它比其他方法都快得多:

product = pd.read_sql_query(f"SELECT * FROM StoringTF WHERE Product_Code = {Val}", c)