Как правильно закрыть MySQL соединение при получении ошибок - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующая функция:

import datetime
import math
from mysqlx import errorcode
import TechnicalAnalysisFunctions as TAFun
import mysql.connector
import pandas as pd
import mysql.connector


def write_to_high_price_table(ticker):

data = TAFun.getDataFromCSV(ticker, data="Highprice")
dates = data.index.astype('str')
prices = data.values

records_to_insert = [(float(prices[0]), str(ticker[0]), datetime.datetime.strptime(dates[0], '%Y-%m-%d'))]

for i in range(1, len(data.values)):
    records_to_insert.append((float(prices[i]), str(ticker[0]), datetime.datetime.strptime(dates[i], '%Y-%m-%d')))

try:
    connection = mysql.connector.connect(host='localhost',
                                         database='Stocks',
                                         user='root',
                                         password=_password)

    sql_insert_query = """ INSERT INTO HighPrice ( HighPrice, Ticker, Date) VALUES (%s,%s,%s) """

    cursor = connection.cursor(prepared=True)
    # used executemany to insert 3 rows
    cursor.executemany(sql_insert_query, records_to_insert)
    connection.commit()

    print(cursor.rowcount, "Record inserted successfully into python_users table")
except mysql.connector.Error as error:
    print("Failed inserting record into python_users table {}".format(error))
finally:
    # closing database connection.
    if connection.is_connected():
        cursor.close()
        connection.close()
        print("connection is closed")

Я получаю предупреждения от PyCharm, так как соединение и курсор потенциально ссылаются перед назначением.Мне интересно, как правильно избавиться от этих предупреждений.Я не могу добавить соединение и курсор в теле ожидания, так как это могут быть строки, создающие эту ошибку.В то же время я не могу включить операторы close в try-body, поскольку я могу получить ошибку между открытием и закрытием соединения.В этом случае соединение никогда не будет закрыто.

...