AttributeError: 'int' object has no attribute 'to_dict'
AttributeError: 'int' object has no attribute 'to_dict'
我的代码有这个问题。我有一个字符串列表 symbols
,我将其作为参数传递到我的函数 statsTable()
.
我在我的 SQL 查询中使用 symbols
列表从我的 DB 中提取请求的项目,在我的例子中,这个列表是一个股票列表。我不想在这里使用循环。该函数的输出应该使用我的 PostgreSQL dB.
中的数据创建一个 DataFrame
往下看:
@app.callback(
dash.dependencies.Output('table_stats', 'data'),
[dash.dependencies.Input('dynamic-dropdown', 'value')])
def statsTable(symbols):
if symbols == None:
raise PreventUpdate
symbols = tuple(symbols)
df = postgresql_to_dataframe(conn, f"SELECT id, companyname, marketcap, to_char(100.0*week52change,'999D99%'), week52high, week52low, to_char(dividend_yield * 100, '99D99%'), next_earnings_date, pe_ratio, ROUND(beta,2) FROM security_stats WHERE security_stats.id IS {symbols} ;", col)
data = df.to_dict('rows')
columns=[{"name": i, "id": i} for i in security_stats.columns]
return dt.DataTable(data=data, columns=columns)
我将股票列表转换为元组以删除括号,这样我的 SQL 查询就不会混淆。当我 运行 我的 Dash 应用程序的代码时,我得到 AttributeError: 'int' object has no attribute 'to_dict'
.
我不明白为什么,因为当我在沙盒环境中 运行 下面的代码(以测试它是否有效)时,一切似乎都很好,我得到了我要求的数据的 DataFrame ,不使用循环:
symbols = ('FB','AAPL', 'EBAY','AMD')
col = ['Symbol','Company','Market Cap','1yr-Change', '52-Week High','52-Week Low','Dividend Yield','Next Earnings Report','PE-Ratio','Beta']
df = postgresql_to_dataframe(conn, f"SELECT id, companyname, marketcap, to_char(100.0*week52change,'999D99%'), week52high, week52low, to_char(dividend_yield * 100, '99D99%'), next_earnings_date, pe_ratio, ROUND(beta,2) FROM security_stats WHERE security_stats.id IN {symbols} ;", col)
df.head()
这是我正在寻找的输出...
如果这有帮助,这是我用来提取 SQL 数据并将其转换为 DataFrame 的函数:
def postgresql_to_dataframe(conn, select_query, column_names):
"""
Tranform a SELECT query into a pandas dataframe
"""
cursor = conn.cursor()
try:
cursor.execute(select_query)
except (Exception, psycopg2.DatabaseError) as error:
print("Error: %s" % error)
cursor.close()
return 1
# Naturally we get a list of tupples
tupples = cursor.fetchall()
cursor.close()
# We just need to turn it into a pandas dataframe
df = pd.DataFrame(tupples, columns=column_names)
return df
是什么导致我在 statsTable(symbols)
函数中引发此错误 AttributeError: 'int' object has no attribute 'to_dict'
?我很感激我能得到的所有帮助,一直在努力解决这个问题。
编辑:
这是完整的错误。
>>> data = df.to_dict('rows')
AttributeError: 'int' object has no attribute 'to_dict'
try:
cursor.execute(select_query)
except (Exception, psycopg2.DatabaseError) as error:
print("Error: %s" % error)
cursor.close()
return 1
当引发异常时,您的异常处理会导致 postgresql_to_dataframe
到 return 一个整数而不是一个 DataFrame。当然,不可能对整数调用 .to_dict
,因为错误消息非常明确地告诉您。
所以近因是查询执行引发了异常。 Dash 应用程序可能是一个不允许您查看标准输出的上下文,因此您不会收到错误打印输出。
我的代码有这个问题。我有一个字符串列表 symbols
,我将其作为参数传递到我的函数 statsTable()
.
我在我的 SQL 查询中使用 symbols
列表从我的 DB 中提取请求的项目,在我的例子中,这个列表是一个股票列表。我不想在这里使用循环。该函数的输出应该使用我的 PostgreSQL dB.
往下看:
@app.callback(
dash.dependencies.Output('table_stats', 'data'),
[dash.dependencies.Input('dynamic-dropdown', 'value')])
def statsTable(symbols):
if symbols == None:
raise PreventUpdate
symbols = tuple(symbols)
df = postgresql_to_dataframe(conn, f"SELECT id, companyname, marketcap, to_char(100.0*week52change,'999D99%'), week52high, week52low, to_char(dividend_yield * 100, '99D99%'), next_earnings_date, pe_ratio, ROUND(beta,2) FROM security_stats WHERE security_stats.id IS {symbols} ;", col)
data = df.to_dict('rows')
columns=[{"name": i, "id": i} for i in security_stats.columns]
return dt.DataTable(data=data, columns=columns)
我将股票列表转换为元组以删除括号,这样我的 SQL 查询就不会混淆。当我 运行 我的 Dash 应用程序的代码时,我得到 AttributeError: 'int' object has no attribute 'to_dict'
.
我不明白为什么,因为当我在沙盒环境中 运行 下面的代码(以测试它是否有效)时,一切似乎都很好,我得到了我要求的数据的 DataFrame ,不使用循环:
symbols = ('FB','AAPL', 'EBAY','AMD')
col = ['Symbol','Company','Market Cap','1yr-Change', '52-Week High','52-Week Low','Dividend Yield','Next Earnings Report','PE-Ratio','Beta']
df = postgresql_to_dataframe(conn, f"SELECT id, companyname, marketcap, to_char(100.0*week52change,'999D99%'), week52high, week52low, to_char(dividend_yield * 100, '99D99%'), next_earnings_date, pe_ratio, ROUND(beta,2) FROM security_stats WHERE security_stats.id IN {symbols} ;", col)
df.head()
这是我正在寻找的输出...
如果这有帮助,这是我用来提取 SQL 数据并将其转换为 DataFrame 的函数:
def postgresql_to_dataframe(conn, select_query, column_names):
"""
Tranform a SELECT query into a pandas dataframe
"""
cursor = conn.cursor()
try:
cursor.execute(select_query)
except (Exception, psycopg2.DatabaseError) as error:
print("Error: %s" % error)
cursor.close()
return 1
# Naturally we get a list of tupples
tupples = cursor.fetchall()
cursor.close()
# We just need to turn it into a pandas dataframe
df = pd.DataFrame(tupples, columns=column_names)
return df
是什么导致我在 statsTable(symbols)
函数中引发此错误 AttributeError: 'int' object has no attribute 'to_dict'
?我很感激我能得到的所有帮助,一直在努力解决这个问题。
编辑: 这是完整的错误。
>>> data = df.to_dict('rows')
AttributeError: 'int' object has no attribute 'to_dict'
try:
cursor.execute(select_query)
except (Exception, psycopg2.DatabaseError) as error:
print("Error: %s" % error)
cursor.close()
return 1
当引发异常时,您的异常处理会导致 postgresql_to_dataframe
到 return 一个整数而不是一个 DataFrame。当然,不可能对整数调用 .to_dict
,因为错误消息非常明确地告诉您。
所以近因是查询执行引发了异常。 Dash 应用程序可能是一个不允许您查看标准输出的上下文,因此您不会收到错误打印输出。