You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyScript运行Python脚本遇mysql模块缺失错误如何解决?

问题分析与解决方案

核心问题

  1. Pyodide环境限制:PyScript基于WebAssembly版Python(Pyodide),不支持依赖原生C扩展的Python库。你用的mysql.connector部分依赖原生扩展,无法在Pyodide中运行;而pymysql是纯Python实现,但你未正确声明依赖包。
  2. 浏览器同源策略:浏览器会阻止直接访问MySQL的3306端口,即使依赖配置正确,也会因跨域限制无法连接数据库。
  3. HTML代码错误:<py-script>标签同时使用src属性和内部代码,会导致加载冲突。

分步解决

1. 替换为兼容Pyodide的MySQL客户端

改用纯Python实现的pymysql,并修正依赖配置:

  • 修改HTML的<py-config>:
<py-config>
  [[fetch]]
  files = ["./get_sql_where.py"]

  packages = ["pymysql"]
</py-config>
  • 修改Python脚本get_sql_where.py,替换mysql.connector为pymysql:
import pymysql
import webbrowser
import time

mydb = pymysql.connect(
  host="196.168.16.144",
  user="root",
  password="password123", 
  database="cloud_db",  
  auth_plugin='mysql_native_password'
)
                
mycursor = mydb.cursor()
mycursor.execute("SELECT P_TITLE,P_DESC  FROM webpage WHERE P_ID = 'en_1-01'")                       
                                         
myresult = mycursor.fetchall()
print(myresult)    

2. 解决跨域访问问题

浏览器禁止直接访问非HTTP/HTTPS端口,需通过后端代理中转请求:

  • 用Flask写一个简单代理接口(proxy.py):
from flask import Flask, jsonify
import pymysql
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # 允许跨域请求

@app.route('/get-data')
def get_data():
    mydb = pymysql.connect(
        host="196.168.16.144",
        user="root",
        password="password123", 
        database="cloud_db",  
        auth_plugin='mysql_native_password'
    )
    mycursor = mydb.cursor()
    mycursor.execute("SELECT P_TITLE,P_DESC  FROM webpage WHERE P_ID = 'en_1-01'")                       
    myresult = mycursor.fetchall()
    return jsonify({"data": myresult})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)
  • 修改PyScript脚本,通过代理接口获取数据:
import requests

response = requests.get("http://localhost:5000/get-data")
data = response.json()
print(data["data"])
  • 在<py-config>中添加requests依赖:packages = ["pymysql", "requests"]

3. 修正HTML代码错误

<py-script>标签不能同时使用src属性和内部代码,二选一:

<!-- 方式1:加载外部脚本 -->
<py-script src="get_sql_where.py"></py-script>

<!-- 方式2:直接写内部代码 -->
<py-script>
import requests
response = requests.get("http://localhost:5000/get-data")
print(response.json()["data"])
</py-script>

内容的提问来源于stack exchange,提问作者俠客行_da code learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:50:23