1

我正在尝试编写一个简单的程序来连接 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)

代码运行得很好!我不确定,但为什么会这样?我真的很想运行早期版本的代码,因为后者对我来说太慢了。

4

2 回答 2

1

我的猜测是user被传递给create_connection()来自该行

for user in users:

这就是它在循环之外工作的原因,因为它正在访问正确的user,即具有 String 数据类型的那个。

另一种方法是使用while循环或将行更改为:

for u in users:

否则你应该按照warwaruk的建议去做。

于 2012-07-27T10:28:23.690 回答
0

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
于 2012-07-27T08:47:34.113 回答