我很难远程访问MySQL。我使用SSH隧道,希望使用Python+SQLALchemy连接数据库MySQL。
当我在控制台中使用MySQL客户端并指定“ptotocol=TCP
”时,一切都很好!
我使用命令:
mysql -h localhost —protocol=TCP -u USER -p
我可以通过SSH隧道访问远程数据库。
但是,当我想使用Python+SQLAchemy连接到数据库时,我找不到像—protocol=TCP
这样的选项
否则,我只能连接到本地MySQL数据库。
请告诉我,有没有使用SQLAlchemy的方法。
这个问题的经典答案是使用主机的
127.0.0.1
或IP或主机名而不是“特殊名称”localhost
。从documentation:之后:
然而,这个简单的技巧在您的情况下似乎不起作用,因此您必须以某种方式强制使用TCP套接字。正如您自己所解释的,在命令行上调用
mysql
时,使用--protocol tcp
选项。如here所述,从SQLAlchemy中,可以使用
connect_args
关键字参数将相关选项(如果有的话)作为URL选项或传递给驱动程序。例如,使用PyMySQL,在为此目的而设置的测试系统(MariaDB 10.0.12、SQLAlchemy 0.9.8和PyMySQL 0.6.2)上,我得到了以下结果:
正如您所注意到的,两者都将使用TCP连接(我知道这是因为主机名后面的端口号)。另一方面:
主机名后没有端口:这是一个UNIX套接字。
在我的设置中(我使用mysql python),只使用127.0.0.1而不是mysql SQLAlchemy url中的localhost。我使用的完整url正是针对该场景(带有本地端口3307的隧道)的:
我使用的是SQLAlchemy 1.0.5,但我想这并不重要。。。
相关问题 更多 >
编程相关推荐