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 に答える