如何使用 SQL 查询中的值填充流式选择框

How to populate a streamlit selectbox with vlaues from a SQL query

目标是让流线型选择框显示来自数据库符号列的货币对列表。

cursor.execute("""
SELECT symbol FROM pair LIMIT 3
""")

pairs = cursor.fetchall()

st.write(pairs)

输出为

[
  0:[
   0:"ETHBTC"
  ]
  1:[
   0:"LTCBTC"
  ]
  2:[
   0:"BNBBTC"
  ]
]

我有一个嵌套的 for 循环来检索每对的符号

for list in pairs:
    for pair in list:
        st.write(pair)

输出为:

ETHBTC
LTCBTC
BNBBTC

到目前为止一切顺利。但是当我将它加载到选择框中时,行为变得很奇怪。这只是一个例子,但我有很多不想要的结果。

st.sidebar.selectbox('Select symbol', pair)
B
N
B
B
T
C

我现在被困了几个小时。如果有人可以帮助我,那就太好了。谢谢。

您必须将序列传递给 select 框,并且该序列的每个元素都将显示为 select 的可能元素。我假设你传递的是 pair = 'BNBBTC'。这意味着每个字符都会成为您可以选择的一个值。但是,您必须传递给 select 框的内容是 choices = ['ETHBTC', 'LTCBTC', 'BNBBTC'].

A​​s fetchall returns 一个元组列表,你可以得到它作为 options = [row[0] for row in cursor.fetchall()] 最后做 st.sidebar.selectbox('Select symbol', options)

假设您要在 for 循环内添加选择框,发生的情况是 Python 将字符串视为一组可迭代的字符。 st.sidebar.selectbox 需要一个可迭代对象(list-like),因此获取每个字符并使其成为选择框中的一个选项。

我不太确定我是否理解你显示为 JSON (?) 的数据结构,但我会使用 list-comprehension 来提取你想要的值。效果

pairs = [x[0][0] for x in cursor.fetchall()]