14

我正在尝试使用变量作为表名。我收到错误“...在第 1 行的 ''myTable'' 附近,我一定不能逃避这个权利。错误中的双 '' 似乎是一个线索,但我不明白。

db = MySQLdb.connect("localhost","user","pw","database" )
table = "myTable"
def geno_order(db, table):
    cursor = db.cursor() # prepare a cursor object using cursor() method
    sql = "SELECT * FROM %s"
    cursor.execute(sql, table)
    results = cursor.fetchall()
4

1 回答 1

17

您不能在execute调用中为表名使用参数。您需要为此使用普通的 Python 字符串插值:

sql = "SELECT * FROM %s" % table
cursor.execute(sql)

当然,如果表名来自用户输入,则需要格外小心。要减轻 SQL 注入,请根据有效名称列表验证表名。

于 2013-03-06T19:04:33.243 回答