Ваш __del__
метод вызывает путаницу.В частности, это относится к self.cursor
и self.conn
, которые могут никогда не быть созданы, если, например, MySQLdb.Connect
вызывает исключение (что, по-видимому, и происходит).
Я предлагаю вам изменить свой класс какследует:
class MySQL( object ):
def __init__( self ):
self.conn = None
self.cursor = None
self.host = config.get("mysql","host")
self.port = config.get("mysql","port")
self.user = config.get("mysql","user")
self.passwd = config.get("mysql","passwd")
self.db = config.get("mysql","db")
self.unix_socket = config.get("mysql","unix_socket")
self.conn = MySQLdb.Connect(self.host,
self.port,
self.user,
self.passwd,
self.db,
self.unix_socket)
self.cursor = self.conn.cursor ( MySQLdb.cursors.DictCursor )
def __del__( self ):
if self.cursor is not None:
self.cursor.close()
if self.conn is not None:
self.conn.close()
Это не решит проблему, но даст лучшую диагностику.
Теперь к реальной проблеме, с которой вы столкнулись.Я сильно подозреваю, что вы предоставляете аргументы Connect
в неправильном порядке, или типы не совсем правильные, или что-то в этом роде.Чтобы процитировать строку документации для Connection.__init__
:
Create a connection to the database. It is strongly recommended
that you only use keyword parameters. Consult the MySQL C API
documentation for more information.
host
string, host to connect
user
string, user to connect as
passwd
string, password to use
db
string, database to use
port
integer, TCP/IP port to connect to
unix_socket
string, location of unix_socket to use
...
"Настоятельно рекомендуется использовать только ключевые параметры." Я рекомендую вам делать это при вызове MySQLdb.Connect
.Также убедитесь, что port
является int
, а не строкой.