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