【问题标题】:Use SQL 'like' in Pandas with input()通过 input() 在 Pandas 中使用 SQL 'like'
【发布时间】:2016-11-14 16:17:49
【问题描述】:

所以我使用下面的代码从 SQL Server 中的某个表中选择列。

sus_base = pd.read_sql_query("SELECT screen_name, user_id, text FROM [dbo].[TABLE_ONE]", con)
df1 = pd.read_sql_query("SELECT screen_name, user_id, text FROM [dbo].[TABLE_ONE] WHERE text like '%car%'", con)
df2= pd.read_sql_query("SELECT screen_name, user_id, text FROM [dbo].[TABLE_ONE] WHERE text like '%plane%'", con)
df3= pd.read_sql_query("SELECT screen_name, user_id, text FROM [dbo].[TABLE_ONE] WHERE text like '%quality%'", con)

但是,我必须对很多字符串进行这种匹配。我在 Python 中尝试了以下方法,但没有成功:

test = pd.read_sql_query(("SELECT screen_name, user_id, text FROM [dbo].[TABLE_ONE] WHERE text like '%s%'", input()), con)

在询问我输入后,它给了我以下错误:

DatabaseError: Execution failed on sql '("SELECT screen_name, user_id, text FROM [dbo].[TABLE_ONE] WHERE text like '%s%'", "'car'")': bytes or integer address expected instead of tuple instance. 

是的,我也试过在汽车周围不加''引号。

df1 看起来像:

JAN | 20938 | Hi I am looking for a car somewhere
BOB | 38470 | Guys, where is my plane?
ELSA| 49850 | Never know what to do next..
CARL| 08923 | The quality of this product is amazing!
ETC.

您可以想象,要创建它会做很多工作。因此,如果最终用户可以在文本字符串中键入他正在寻找的单词,并且它会像我在上面的示例中键入它们时那样返回这些文本,那就太好了。然后我会确保它进入数据框和/或 Excel 文件。

【问题讨论】:

    标签: python sql-server pypyodbc


    【解决方案1】:

    输入没有被翻译成 pandas 发送查询所需的文本。行内:

    pd.read_sql_query(("SELECT ... WHERE text like '%s%'", input()), con)
    

    实际输入的是pd.read_sql_query((str, str), con)。换句话说,您发送了一个 2 元组字符串和连接对象,它只需要一个字符串和连接对象。尝试格式化字符串:

    pd.read_sql_query("SELECT ... WHERE text like %{}%".format(input()), con)
    

    【讨论】:

    • 嗨,詹姆斯,感谢您的回答。但是,它现在要求输入列名。当我将其更改为以下内容时,它工作得很好,谢谢! ..query("SELECT ... WHERE text like '%{}%'.format(input()), con)
    • 酷,我会更新我的答案。请记住将问题标记为已回答。
    • 抱歉回复晚了,但我将其标记为已回答;)。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多