运行Streamlit+SQLite3项目报错__conform__()不是有效命令如何解决
错误原因
- 你代码中
result = st.text("Positive")得到的是Streamlit的前端渲染对象,不是你预期的"Positive"字符串。你将这个对象直接传给SQLite的插入方法时,SQLite会尝试调用对象的__conform__方法做类型适配,而该方法属于Streamlit内部未对外开放的命令,因此触发报错。
修复步骤
1. 修改主程序home_task.py的Insert逻辑
将result的定义和展示拆分,保证传给数据库的是字符串类型,同时补充Read页面的表格展示逻辑:
import streamlit as st import pandas as pd from homework_db import create_table, add_data, query_all_data def main(): st.title("Streamlit Exercise") menu = ['Insert', 'Read'] choice = st.sidebar.selectbox("Menu", menu) create_table() if choice == 'Insert': st.subheader('Lets check Sentiment') line = st.text_area("Enter the sentence") # 拆分结果定义和前端展示,确保result为字符串 result = "Positive" st.text(result) if st.button("Add Task"): add_data(line, result) st.success("Successfully added data in database") elif choice == 'Read': st.subheader('Datatable') # 读取所有数据并以表格展示 all_data = query_all_data() df = pd.DataFrame(all_data, columns=["输入句子", "情感结果"]) st.dataframe(df, use_container_width=True) if __name__ == "__main__": main()
2. 补充数据库操作文件homework_db.py的查询方法
import sqlite3 conn = sqlite3.connect("homework2_db", check_same_thread=False) c = conn.cursor() ## database-table-field-datatype## def create_table(): # 建议:表名不要用database(SQL关键字),可改为sentiment_data避免后续冲突 c.execute('CREATE TABLE IF NOT EXISTS database(sentence TEXT, sentiment TEXT)') def add_data(line, result): c.execute('INSERT INTO database(sentence,sentiment) VALUES(?,?)', (line, result)) conn.commit() # 新增查询所有数据的方法 def query_all_data(): c.execute('SELECT * FROM database') return c.fetchall()
额外优化建议
将表名从database改为自定义名称(比如sentiment_records),database属于SQL保留关键字,后续可能触发其他语法异常。
内容的提问来源于stack exchange,提问作者subham
相关产品推荐
相关产品推荐

