本文最后更新于 2026年5月11日。
html_columns渲染超链接导致空格后的部分丢失,把空格转换成%20就可以了。
把项目所有文件上传到如下位置:
/opt/1panel/docker/compose/search_mariadb
终端进入该目录并执行:
[root@iZ8vbajg9wo8iwynfb1lgeZ search_mariadb]# docker-compose up
设置网站反向代理即可访问。
核心功能完整代码:
“`
def run():
global limit, offset
keywords_str = input_file_UIinput.value
keywords = keywords_str.split(‘ ‘)
# SQL查询语句
query = "SELECT * FROM constant WHERE"
# query += " OR".join([f" filepath LIKE '%{keyword}%'" for keyword in keywords])
query += " AND".join([f" filepath LIKE '%{keyword}%'" for keyword in keywords])
# query += " LIMIT 3 OFFSET 0;"
query += f" LIMIT {limit} OFFSET {offset};"
print(query)
env = 'product' #product or develope
## 连接数据库
if env == 'product':
SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://root:SQLroot77@mariadb:3306/books'
else:
SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://root:SQLroot77@47.92.255.11:3306/books'
# print('start connect database...')
# engine = sqlalchemy.create_engine(SQLALCHEMY_DATABASE_URI, echo=True)
engine = sqlalchemy.create_engine(SQLALCHEMY_DATABASE_URI, echo=False,
connect_args={"connect_timeout": 10},
pool_timeout=10,
pool_recycle=315)
# 执行查询并获取结果
df = pd.read_sql_query(query, engine)
# 使用/分割每一行并从中提取最后一个元素
last_elements = [row.split('\\')[-1] for row in df['filepath']]
# 创建一个空列表
result_list = []
# 将每一列的最后一个元素添加到结果列表中
for index, row in df.iterrows():
temp_dict = row.to_dict()
temp_dict['filename'] = last_elements[index]
file_link = 'https://drive.my-elibrary.com'+ temp_dict['filepath']
# 使用replace()函数将空格替换为%20
encoded_url = file_link.replace(" ", "%20") # 将空格转成%20防止链接内容丢失
temp_li = encoded_url.split('\\')
folder_link = '\\'.join(temp_li[0:-1])
temp_dict['filelink'] = f'<a href={encoded_url} target="_new">download file</a>'
temp_dict['folderlink'] = f'<a href={folder_link} target="_new">open folder</a>'
result_list.append(temp_dict)
grid.options['rowData'] = result_list ## 不知道为什么响应式无效,虽然数据已经改变,组件第二次的时候改变不了
grid.update() # if data linked to grid changed, update aggrid grid_mate要声明全局变量
offset += limit
“`