【问题标题】:Python pandas pd.read_sql with parameter from dropdown text value带有下拉文本值参数的 Python pandas pd.read_sql
【发布时间】:2020-12-29 17:34:51
【问题描述】:

我正在使用:

  • 将 pandas 导入为 pd
  • 导入破折号
  • 将 dash_core_components 导入为 dcc
  • 将 dash_html_components 导入为 html

我想使用带参数的 pd.read_sql 执行 SQL(dropdown1 的默认值为 'MTL')

   @app.callback(dash.dependencies.Output("graph1", "figure"),
          [dash.dependencies.Input("dropdown1","value")])

   def update_fig1(dropdown1_value):
          df = pd.read_sql('SELECT CONVERT(int,month) as month,CONVERT(int, revenue) as revenue FROM 
                            dbo.Sales_data where region = ' +   dropdown1_value +'',
          cnxn
          )

          df_month = df['month']
          df_revenue = df['revenue']
          data = [
                 {'x': df_month,
                  'y': df_revenue,
                  'type': 'line', 'name': 'SF'
                 }
                 ]

          return {'data': data}

我得到一个错误:

pandas.io.sql.DatabaseError: sql 'SELECT CONVERT(int,month) as month,CONVERT(int,income) as income FROM dbo.Sales_data where region = MTL': ('42S22', " [42S22] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]列名“MTL”无效。(207) (SQLExecDirectW)")

我非常感谢任何可能的帮助!

【问题讨论】:

  • 那么dropdown1_value 是什么类型的?字符串还是列表?

标签: python pandas dropdown


【解决方案1】:

当dropdown1_value 是str 值时,则使用:

sql = f'''
SELECT CONVERT(int,month) as month
    ,CONVERT(int, revenue) as revenue 
FROM dbo.Sales_data where region = '{dropdown1_value}'
'''
df = pd.read_sql(sql, cnxn)

而dropdown1_value 是一个列表值,那么使用:

sql = f'''
SELECT CONVERT(int,month) as month
    ,CONVERT(int, revenue) as revenue 
FROM dbo.Sales_data where region in {tuple(dropdown1_value)}
'''
df = pd.read_sql(sql, cnxn)

【讨论】:

    【解决方案2】:

    按照错误代码的建议,您没有引用字符串MTL,SQL Server 默认将 MTL 理解为列引用。用单引号将您的值括起来,它应该可以工作。

          df = pd.read_sql('SELECT CONVERT(int,month) as month,CONVERT(int, revenue) as revenue FROM 
                            dbo.Sales_data where region = \'' +   dropdown1_value + '\'',
    

    【讨论】:

      【解决方案3】:

      感谢您的回复。所以现在我得到一个错误:

         File "C:\Users\007\PycharmProjects\pythonProject5\main.py", line 377, in update_fig1
         df = pd.read_sql('SELECT CONVERT(int,month) as month,CONVERT(int, revenue) as 
         revenue FROM dbo.Sales_data where region = \'' + dropdown1_value + '\'',
         
      

      TypeError: 只能将 str(不是“list”)连接到 str

      【讨论】:

      • 看起来dropdown1_value 是一个列表?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2018-11-12
      相关资源
      最近更新 更多