【发布时间】:2021-12-05 05:39:12
【问题描述】:
我正在尝试在我的本地计算机上运行在 pythonAnywhere 上的 mySQL 服务器中创建一个表。 我遵循了入门指南https://help.pythonanywhere.com/pages/AccessingMySQLFromOutsidePythonAnywhere,但遇到了 OperationalError: (2013, 'Lost connection to MySQL server during query')。
这是我的代码:
import MySQLdb
import sshtunnel
sshtunnel.SSH_TIMEOUT = 10
sshtunnel.TUNNEL_TIMEOUT = 10
with sshtunnel.SSHTunnelForwarder(
('ssh.pythonanywhere.com'),
ssh_username='MyUSERNAME', ssh_password='***',
remote_bind_address=('MyUSERNAME.mysql.pythonanywhere-services.com', 3306)
) as tunnel:
connection = MySQLdb.connect(
user='MyUSERNAME',
passwd='***',
host='127.0.0.1', port=tunnel.local_bind_port,
db='MyUSERNAME$liveSports',
)
cur = connection.cursor()
with connection:
cur.execute("CREATE TABLE table_one (date TEXT, start_time TEXT)")
我不确定为什么会收到此错误,或者如何解决它。 类似的错误 Lost connection to MySQL server during query 表明我向我的服务器发送了一个不正确的查询,但据我所知这是一个有效的查询,或者我的数据包太大,我不相信空表会的。
我是 SQL 新手,但我似乎找不到这个问题的答案。
【问题讨论】:
-
这就是你的代码的样子,包括确切的缩进吗?如果是这样,那就是问题所在。一旦“with”语句退出,SSH 隧道将关闭,您将失去连接。您需要在使用连接的整个过程中保持隧道打开。
with在这里可能不是正确的选择。 -
这就是我的代码的样子。我对 sqlite 稍微熟悉一些,使用 with connection 可以让我用光标在服务器上执行命令。我应该如何解决错误?这段代码直接取自 pythonanywhere 指南减去游标执行。
-
你看我的回复了吗?我告诉过你如何解决它。您要么将所有代码放在
with语句中,要么只执行tunnel = SSHTunnelForwarder(...)并将其保留为全局,而不使用with。
标签: python mysql sql-server create-table ssh-tunnel