2016-11-20 86 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