2016-11-20 91 views
0

我試圖將一些數據插入數據庫使用變量測試作爲表名稱。但不幸的是,我似乎無法做到這一點。誰能幫我嗎?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") 

您需要Python的字符串替換從MySQL的參數替換分開。以上是粗略的方法,但與您自己的代碼極爲不同。

+0

我似乎得到TypeError:不受支持的操作數類型(S)爲%:'元組'和'元組'當我嘗試一下 – 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'和'tuple'當我嘗試它 – user3702643