Python RuntimeError:OperationalError:(2003,无法连接到实例';IP地址';
我正在尝试运行一个Python(版本2.7.1')脚本,其中我使用pymysql包从CSV文件创建一个表到数据库 它在我的本地系统中运行正常,但是,当运行与谷歌云数据流中管道的一部分相同的脚本时,就会出现问题 我的Python函数如下所示:Python RuntimeError:OperationalError:(2003,无法连接到实例';IP地址';,python,mysql,google-cloud-platform,google-cloud-dataflow,google-cloud-sql,Python,Mysql,Google Cloud Platform,Google Cloud Dataflow,Google Cloud Sql,我正在尝试运行一个Python(版本2.7.1')脚本,其中我使用pymysql包从CSV文件创建一个表到数据库 它在我的本地系统中运行正常,但是,当运行与谷歌云数据流中管道的一部分相同的脚本时,就会出现问题 我的Python函数如下所示: class charge_to_db(beam.DoFn): def process(self, element): import pymysql with open(element, 'r') as f:
class charge_to_db(beam.DoFn):
def process(self, element):
import pymysql
with open(element, 'r') as f:
data = f.read().decode("UTF-8")
datalist = []
for line in data.split('\n'):
datalist.append(line.split(','))
db = pymysql.connect(host='IPaddress', user='root', password='mypassword', database='stack_model')
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS stack_convergence")
# create column names from the first line in fList
up = "upper_bnd"
primal = "primal"
d = "dualit"
gap = "gap_rel"
teta = "teta"
alpha = "alpha"
imba = "imba_avg"
price = "price_avg"
# create STUDENT table // place a comma after each new column except the last
queryCreateConvergenceTable = """CREATE TABLE stack_convergence(
{} float not null,
{} float not null,
{} float not null,
{} float not null,
{} float not null,
{} float not null,
{} float not null,
{} float not null )""".format(up, primal, d, gap, teta, alpha, imba, price)
cursor.execute(queryCreateConvergenceTable)
在云中运行此函数时,我得到以下错误:
RuntimeError: OperationalError: (2003, 'Can\'t connect to MySQL server on \'35.195.1.40\' (110 "Connection timed out")')
我不知道为什么会发生这个错误,因为它在本地系统中正确运行,所以我可以从本地系统访问我的云SQL实例,但不能从云中的数据流访问
为什么会发生此错误?在Dataflow上,您不能将IP列入白名单以使Dataflow能够访问SQL实例。如果您要使用Java,最简单的方法是使用JdbcIO/JDBC套接字工厂 但是,既然您使用的是Python,那么使用Python特定的数据库连接工具来模拟JdbcIO.read()的实现会有所帮助 如果这看起来很复杂,您也可以选择从云存储加载