目录

streamlit-在streamlit连接数据库-并且-增删改查

(streamlit) 在streamlit连接数据库 并且 增删改查

☆ 问题描述

最近开发了一点streamlit的小应用,想要连接到数据库,steamlit提供了st.connction方法,学习一下怎么连接

★ 解决方案

官方提供了几种方法

连接方法

方法一 使用配置文件连接

  1. 首先需要在项目的根目录下创建.streamlit文件夹,然后添加secrets.toml文件

    https://i-blog.csdnimg.cn/blog_migrate/9bc5b95c64b946090754c9749f9472e9.png

  2. 在secrets.toml文件中写入数据库配置

    https://i-blog.csdnimg.cn/blog_migrate/1ee87b2fe4e7678f0c7dad4b93b3e557.png

  3. 使用如下代码就可以连接了

    https://i-blog.csdnimg.cn/blog_migrate/d928ef6f80120e8a6571a3200a4b7319.png

增删改查

增加

简单的增加

这里param_dict是int

https://i-blog.csdnimg.cn/blog_migrate/65c81c4562ce957a0846c2a18679f6bb.png

带变量的增加1

这里param_dict 是varchar

https://i-blog.csdnimg.cn/blog_migrate/ad4f49eeadd634ebd96b7b272fe6011c.png

带变量的增加2

上面那种方式只能适合比较简单的数据,如果数据比较复杂,如包含很多引号和符合的字典,下面这种方式会更加适合

import json
from datetime import datetime
from sqlalchemy import text

now_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') # Get current timestamp

sql = '''
INSERT INTO manual_selection_record (create_time, data_file_name, data_hash, param_dict)
VALUES (:now_time, :file_name, :data_hash, :param_dict)
'''

with st.spinner('正在连接数据库...'):
try:
conn = st.connection('mysql', type='sql')
conn.connect()
conn_to_database = True
st.write("🌞 数据库连接成功,数据写入数据库")
except:
st.write("💥 数据库连接失败,数据写入本地日志")

if conn_to_database:
with conn.session as s:
s.execute(text(sql), {
'now_time': now_time,
'file_name': file_name, # Assuming file_name is defined somewhere in your code
'data_hash': data_hash, # Assuming data_hash is defined somewhere in your code
'param_dict': json.dumps(model_param, ensure_ascii=False)
})
s.commit()

查询字段

https://i-blog.csdnimg.cn/blog_migrate/77823251cb2b1ab6dbaf7ca96cc062e4.png

https://i-blog.csdnimg.cn/blog_migrate/6018a64a918844722567668352a6d87b.png