我正在尝试编写一个简单的程序来连接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)
代码运行完美!我不确定,但为什么会这样呢?我真的想运行早期版本的代码,因为后者对我来说太慢了。
答案 0 :(得分:1)
我的猜测是传递给user
的{{1}}来自
create_connection()
这就是它在循环之外工作的原因,因为它正在访问正确的for user in users:
,即具有String数据类型的那个。
另一种方法是改为使用user
循环或将行更改为:
while
否则你应该做什么warwaruk建议。
答案 1 :(得分: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