简体   繁体   English

Python pymysql 有效,但 sqlalchemy 无效

[英]Python pymysql works but sqlalchemy does not

I'm on an EC2 instance Centos7.我在一个 EC2 实例 Centos7 上。 Using Python 3.9.10.使用 Python 3.9.10。 Virtualenv activated with following libraries sqlalchemy , pandas , pymysql installed. Virtualenv 激活了以下库sqlalchemypandaspymysql安装。

So this works fine:所以这很好用:

import os
import pymysql
dw = {
    "host": os.environ.get("DW_HOST"),
    "database": os.environ.get("DW_DATABASE"),
    "user": os.environ.get("DW_USER"),
    "password": os.environ.get("DW_PASS"),
}
conn = pymysql.connect(**dw)
with conn.cursor() as cur:
    cur.execute("SELECT * FROM table LIMIT 10")
    data = cur.fetchall()
    for row in data:
        print(row)

This doesn't and I don't know why ( works locally ):这没有,我不知道为什么(在本地工作):

import sqlalchemy
import pandas as pd
import os
dw = {
    "host": os.environ.get("DW_HOST"),
    "database": os.environ.get("DW_DATABASE"),
    "user": os.environ.get("DW_USER"),
    "password": os.environ.get("DW_PASS"),
}
engine = sqlalchemy.create_engine(f'mysql+pymysql://{dw["user"]}:{dw["password"]}@{dw["host"]}/{dw["database"]}')
df = pd.read_sql("SELECT * FROM table LIMIT 10", engine)
df

Getting error:得到错误:

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'xyz@cluster-abc.region.rds.amazonaws.com' ([Errno -2] Name or service not known)")
(Background on this error at: https://sqlalche.me/e/14/e3q8)

Also tried:也试过:

conn_string = f'mysql+pymysql://{dw["user"]}:{dw["password"]}@{dw["host"]}/{dw["database"]}'
df = pd.read_sql("SELECT * FROM table LIMIT 10", conn_string)

Also tried:也试过:

  • Adding port number 3306添加端口号3306
  • Adding .connect() method onto engineengine上添加.connect()方法

尝试显式传递端口号。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM