Nushell仅支持SQLite,如何读取MySQL表为数据帧?
在Nushell中使用MySQL表作为数据帧的解决方法
以下是几个实用的解决思路:
方法一:通过CSV/TSV中间文件中转
这是最直接的方案,借助MySQL的导出功能将数据转成Nushell支持的格式:
- 用MySQL内置命令导出CSV:
如果MySQL没有文件写入权限,可通过命令行重定向输出:SELECT * FROM your_table INTO OUTFILE '/tmp/your_table.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';mysql -u 你的用户名 -p -e "SELECT * FROM your_table" 你的数据库名 > /tmp/your_table.csv - 在Nushell中读取并转为数据帧:
let df = (open /tmp/your_table.csv | from csv)
方法二:用Python脚本桥接
借助pandas和MySQL驱动,直接在Nushell中调用脚本获取数据:
- 先安装依赖:
pip install pandas mysql-connector-python - 编写Python脚本(比如
mysql_to_nu.py):import pandas as pd import mysql.connector import sys # 替换成你的MySQL连接信息 conn = mysql.connector.connect( host='localhost', user='你的用户名', password='你的密码', database='你的数据库名' ) df = pd.read_sql("SELECT * FROM your_table", conn) # 将数据输出为CSV格式供Nushell读取 df.to_csv(sys.stdout, index=False) conn.close() - 在Nushell中调用并转为数据帧:
let df = (python mysql_to_nu.py | from csv)
方法三:直接集成MySQL命令行输出
利用MySQL的批处理模式输出制表符分隔数据,在Nushell中直接处理:
# 替换成你的MySQL连接参数和表名 let table_data = (mysql -u 你的用户名 -p -B -e "SELECT * FROM your_table" 你的数据库名) let headers = (mysql -u 你的用户名 -p -B -e "DESCRIBE your_table" 你的数据库名 | lines | get 0) let df = ($table_data | lines | skip 1 | split column '\t' | rename ($headers | split column ' ' | get 0))
解释:-B参数让MySQL输出无格式的制表符分隔数据,跳过表头行后拆分列,再用表的字段名重命名列。
内容的提问来源于stack exchange,提问作者Rainb
相关产品推荐
相关产品推荐

