Ошибка аргумента подключения Python MySQL
Я пытаюсь написать простую программу для подключения MySQL и выполнения некоторых операций
host = '10.0.106.40'
user = 'ddddd'
port = 3306
passwd = 'DDDDDD'
db = 'bbbbbbb'
''' Creates a MySQL connection and returns the cursor '''
def create_connection():
connection = mysql.connect(host, user, passwd, db, port)
cursor = connection.cursor()
return connection, cursor
''' Close the connection '''
def close_connection(cursor, connection):
cursor.close()
connection.commit()
connection.close()
Вышеуказанные функции - мои скелеты. Теперь, когда я пытаюсь сделать это
for user in users:
connection, cursor = create_connection()
...
close_connection(cursor, connection)
Я получаю эту ошибку
TypeError: connect() argument 2 must be string, not long
Тем не менее, когда я делаю это
connection, cursor = create_connection()
for user in users:
...
close_connection(cursor, connection)
Код работает отлично! Я не уверен, но почему это должно быть? Я действительно хочу запустить более раннюю версию кода, так как последняя слишком медленная для меня.
2 ответа
Я думаю, что user
передается create_connection()
с линии
for user in users:
Вот почему он работает вне цикла, потому что тогда он обращается к правильному user
а именно тот, который имеет тип данных String.
Альтернативой было бы использовать while
зациклите или измените строку на что-то вроде:
for u in users:
Или же вы должны делать то, что предлагает варварук.
users
такое список целых чисел?
Вот почему плохо иметь дело с глобалами. Лучше передать некоторые параметры create_connection
вместо того, чтобы брать значения из глобалов:
def create_connection(host, user, passwd, db, port):
connection = mysql.connect(host, user, passwd, db, port)
cursor = connection.cursor()
return connection, cursor