【问题标题】:Python MySQL connection argument errorPython MySQL连接参数错误
【发布时间】:2012-07-25 22:16:53
【问题描述】:

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

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

【问题讨论】:

    标签: python mysql arguments database-connection mysql-python


    【解决方案1】:

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

    for user in users:
    

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

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

    for u in users:
    

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

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 是的,users 是一个整数列表。我尝试将参数而不是全局值传递给 create_connection 方法。所以绝对问题不在于那里。
      • users 应该是字符串列表,因为mysql.connect(host, user, passwd, db, port) 需要第二个参数 - 用户名
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 2015-10-17
      • 2017-04-19
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 2019-10-09
      相关资源
      最近更新 更多