flask socket连接mysql_如何使用Python Flask API可靠地保持SSH隧道和MySQL连接的打开?...

好吧,我想好了。我按照this answer中的建议创建了一个DB对象,但稍作修改。我跟踪数据库连接的创建时间,然后每隔30分钟重新建立一次连接。这意味着一个或两个查询需要稍长的时间,因为我正在重建与数据库的连接,但其余查询运行得更快,并且连接不会过时。在

我在下面加入了一些代码。我意识到代码并不完美,但到目前为止它对我是有效的。在import MySQLdb as mydb

import time

import pandas as pd

from sshtunnel import SSHTunnelForwarder

class DB:

def __init__(self):

self.open_ssh_tunnel()

self.conn = None

self.server = None

self.connect()

self.last_connected_time = time.time()

def open_ssh_tunnel(self):

connection_success = False

while not connection_success:

try:

self.server = SSHTunnelForwarder(

(host, 22),

ssh_username=ssh_username,

ssh_private_key=ssh_private_key,

ssh_password=ssh_pwd,

remote_bind_address=(localhost, 3306))

connection_success = True

except:

time.sleep(0.5)

self.server.start()

def connect(self):

connection_success = False

while not connection_success:

try:

self.conn = mydb.connect(host=localhost,

port=server.local_bind_port,

user=user,

passwd=password,

db=database)

connection_success = True

except:

time.sleep(0.5)

def query(self, sql):

result = None

current_time = time.time()

if current_time - self.last_connected_time > 1600:

self.last_connected_time = current_time

self.server.close()

self.conn.close()

self.open_ssh_tunnel()

self.connect()

try:

result = pd.read_sql_query(sql, self.conn).values

self.conn.commit()

except:

self.server.close()

self.conn.close()

self.open_ssh_tunnel()

self.connect()

result = pd.read_sql_query(sql, self.conn).values

return result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值