2016-11-20 7 views
0

変数testをテーブル名として使用して、データベースにデータを挿入しようとしています。しかし、残念ながら私はこれを達成することはできません。誰か助けてくれますか?私の昇給からPythonを%sに挿入するMySQL

私は取得しています:

TypeError: unsupported operand type(s) for %: 'tuple' and 'tuple' 

マイコード:

test = "hello" 
    # Open database connection 
    db = MySQLdb.connect("127.0.0.1","admin","password","table") 

    # prepare a cursor object using cursor() method 
    cursor = db.cursor() 

    # Prepare SQL query to INSERT a record into the database. 
    sql = ("""INSERT INTO %s (name, 
      age, gender) 
      VALUES (%s, %s, %s)""",(test)) 
    try: 
     # Execute the SQL command 
     cursor.execute(sql, (name, age, gender)) 
     db.commit() 
    except: 
     raise 
     db.rollback() 


    # disconnect from server 
     db.close() 
+0

どのようなエラーが表示されますか?私たちに手がかりを与えてください... – Stuart

+0

@Stuartさらに詳しい情報を追加しました! – user3702643

答えて

0

何かが動作します:

sql = """INSERT INTO %s (name, age, gender) 
    VALUES (%s, %s, %s)""" % (test, "%s", "%s", "%s") 

あなたがMySQLのパラメータ置換からPythonの文字列置換を分離する必要があります。上記は粗雑なアプローチですが、あなた自身のコードとは少し異なります。

+0

TypeError:%のためのサポートされていないオペランドのタイプがある: 'tuple'と 'tuple'それを試してください – user3702643

+0

コード編集;やってみよう。 –

+0

うまくいった。ありがとうございました! – user3702643

1

を私はMySQLdbはあなたがテーブル名のパラメータを使用することができますとは思わない - 通常、これは、実際のパラメータに使用されます(ユーザーの入力によるもので、サニタイズが必要な場合があります - 名前/年齢/性別の部分がこの権利を取得します)。あなたはこれを達成するために、Pythonの文字列形式を使用することができます。このような

sql = ("""INSERT INTO {table} (name, age, gender) 
      VALUES (%s, %s, %s)""".format(table=table), (test)) 
+0

.format(table = table)のしくみを説明できますか?私がこれを試したとき、私はNameErrorを取得しました:グローバル名 'table'は定義されていません – user3702643

+0

あなたのテーブルの名前に 'table'変数を代入してください。 [このメカニズムの詳細](https://docs.python.org/2/library/string.html#string.Formatter) – casraf

+0

TypeError:%: 'tuple'のサポート対象外のオペランドタイプ私がそれを試してみるときに 'タプル' – user3702643

関連する問題