sqlite3.OperationalError:near"%":语法错误?

时间:2016-08-12 19:20:52

标签: python python-3.x sqlite

我收到错误:sqlite3.OperationalError: near "%": syntax error 当我尝试运行以下代码时。     import sqlite3

def getFromDB(DBname,table, url):
    conn = sqlite3.connect(DBname)
    cursor = conn.cursor()
    sql = '''SELECT * FROM %s WHERE URL=%s'''
    stuff = cursor.execute(sql, (table,url))
    stuff = stuff.fetchall()
    return stuff

url = 'http://www.examplesite.com/'
getFromDB('AuthorData.sqlite','forbes',url)

我使用SQL在我的%s查询中使用参数。谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您可以使用:

sql = '''SELECT * FROM {0} WHERE URL= {1}'''.format(table, url)

答案 1 :(得分:0)

一些想法: -using参数不适用于表名 -由于sql-injection,使用字符串格式效果不好

因此,首先,创建一种使表名安全的方法:

def escape_table_name(table):
    return '"%s"'.format(table.replace('"', '')

然后使用?作为参数,使用转义表名称和参数来完成代码:

    sql = '''SELECT * FROM %s WHERE URL=?'''.format(escape_table_name(table))
    stuff = cursor.execute(sql, (url,))
    stuff = stuff.fetchall()