Python 以循环方式连接到mysql
我必须连接到mysql服务器并永久获取一些数据 所以我有两条路 1) 稍后连接到mysql抓取数据Python 以循环方式连接到mysql,python,mysql-connector,mysql-connector-python,Python,Mysql Connector,Mysql Connector Python,我必须连接到mysql服务器并永久获取一些数据 所以我有两条路 1) 稍后连接到mysql抓取数据 conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True) cursor = conn.cursor(buffered=True) while True: cursor.execute("statment
conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True)
cursor = conn.cursor(buffered=True)
while True:
cursor.execute("statments")
sqlData = cursor.fetchone()
print(sqlData)
sleep(0.5)
这工作得很好,但如果由于mysql连接问题导致脚本崩溃,脚本将停止运行
2) 同时连接到mysql
while True:
try:
conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True)
cursor = conn.cursor(buffered=True)
cursor.execute("statments")
sqlData = cursor.fetchone()
print(sqlData)
cursor.close()
conn.close()
sleep(0.5)
except:
print("recoverable error..")
两个代码都很好,但我的问题是哪一个更好 在这两种方法中,更好的方法是使用单个连接,但为每个语句创建一个新游标,因为创建新连接需要时间,但创建新游标很快。您可以将代码更新为:
conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True)
while True:
try:
cursor = conn.cursor(buffered=True)
cursor.execute("statments")
sqlData = cursor.fetchone()
print(sqlData)
except Exception: # Catch exception which will be raise in connection loss
conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True)
cursor = conn.cursor(buffered=True)
finally:
cursor.close()
conn.close() # Close the connection
另请阅读有关try:finallyblock的用法。在这两种方法中,更好的方法是使用一个连接,但为每个语句创建一个新游标,因为创建新连接需要时间,但创建新游标很快。您可以将代码更新为:
conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True)
while True:
try:
cursor = conn.cursor(buffered=True)
cursor.execute("statments")
sqlData = cursor.fetchone()
print(sqlData)
except Exception: # Catch exception which will be raise in connection loss
conn = mysql.connector.connect(user='root',password='password',host='localhost',database='db',charset='utf8',autocommit=True)
cursor = conn.cursor(buffered=True)
finally:
cursor.close()
conn.close() # Close the connection
还可以阅读关于
try:finally
block的用法。很好,但是我能为连接丢失做些什么?!例如,mysql在高负载时崩溃,您的代码在mysql恢复正常后不会开始工作,因为连接已断开!如果存在高负载,即使创建新连接也无法工作。您的整个应用程序都将失败。不是吗?在第二段代码中,我可以用try忽略错误…除了mysql服务器重新联机后,它将尝试轻松重新连接,但在第一段代码或您的代码中,无法忽略错误…我错过了永久部分。更新了应答器您的异常代码只运行一次!?最后的工作又是什么?而真实永远不会结束!:)很好,但是我能为连接丢失做些什么?!例如,mysql在高负载时崩溃,您的代码在mysql恢复正常后不会开始工作,因为连接已断开!如果存在高负载,即使创建新连接也无法工作。您的整个应用程序都将失败。不是吗?在第二段代码中,我可以用try忽略错误…除了mysql服务器重新联机后,它将尝试轻松重新连接,但在第一段代码或您的代码中,无法忽略错误…我错过了永久部分。更新了应答器您的异常代码只运行一次!?最后的工作又是什么?而真实永远不会结束!:)