查询结果不会显示为pandas数据框,但可以与print()显示吗?

时间:2019-07-03 14:46:33

标签: python pandas jupyter-notebook ipywidgets

我想创建一个搜索框,它将从用户那里获取输入,将其放入SQL查询中,并从查询的数据库中返回匹配的记录。

一切似乎都可以正常工作-除了我无法将查询结果显示为Pandas数据框。该脚本仅在应显示对象时执行。但是,当我使用print()时,将显示我的结果。

当我这样做时,什么也没发生:

query = pd.read_sql(sql_string, connection)
query

但这很好用:

query = pd.read_sql(sql_string, connection)
print(query)

这是我的代码:

import qgrid
from ipywidgets import widgets
from IPython.display import display

connection = 'connection:details'
text = widgets.Text()
display(text)

def handle_submit(a):
    user_input = text.value
    sp_char = "%"
    sql_string = "SELECT a FROM my_database WHERE UPPER(a) LIKE UPPER('%s%s%s') % (sp_char,user_input,sp_char)
    query = pd.read_sql(sql_string, connection)
    query

text.on_submit(handle_submit)

我很确定我在变量 def 的内部和外部移动的方式上做错了事,但是我不确定如何从这里开始。

编辑:

使用ipywidget函数display()

解决
    query = pd.read_sql(sql_string, connection)
    display(qgrid.show_grid(query))

这就是我所需要的:)

1 个答案:

答案 0 :(得分:0)

IPython不会打印函数内部的返回值。

>>> a = 1
>>> a            # prints 1 because in global scope

>>> def foo():
        a = 2
        a        # prints nothing, even though a value is returned to the REPL
>>> foo()

>>> def baz():
        a = 2
        print(a) # prints 2
>>> baz()

您能否澄清“显示我的结果”是什么意思?