Ошибка аргумента подключения 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
Другие вопросы по тегам