提问者:小点点

在Python中从数据流连接到CloudSQL


我正在尝试使用python管道连接到CloudSQL。

实际情况

  • 我可以使用DirectRunner没有任何问题
  • 我无法使用DataflowRunner连接

连接功能

def cloudSQL(input):
    import pymysql
    connection = pymysql.connect(host='<server ip>',
                                   user='...',
                                   password='...',
                                   db='...')
    cursor = connection.cursor()
    cursor.execute("select ...")
    connection.close()
    result = cursor.fetchone()
    if not (result is None):
        yield input

的错误

这是使用DataflowRunner的错误消息

OperationalError: (2003, "Can't connect to MySQL server on '<server ip>' (timed out)")

云数据库

我有公共IP(从本地测试与Directrunner),我也试图激活私人IP,看看这可能是与DataflowRunner连接的问题

选项2

我也试过用

connection = pymysql.connect((unix_socket='/cloudsql/' + <INSTANCE_CONNECTION_NAME>,
                               user='...',
                               password='...',
                               db='...')

与错误:

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 2] No such file or directory)")

共3个答案

匿名用户

查看云SQL代理。它将创建一个本地入口点(Unix套接字或TCP端口,具体取决于您的配置),用于代理和验证与云SQL实例的连接。

匿名用户

您必须在Python中模拟JdbcIO.read()的实现,如StackOverflow答案中所述

匿名用户

使用这个解决方案,我能够访问CloudSQL。

出于测试目的,您可以将0.0.0.0/0添加到CloudSQL公共IP,而无需使用证书