Python sqlite3.0错误:接近%&引用;:语法错误?

Python sqlite3.0错误:接近%&引用;:语法错误?,python,python-3.x,sqlite,Python,Python 3.x,Sqlite,我收到错误:sqlite3.OperationalError:near“%”:语法错误 当我尝试运行以下代码时。 导入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,ur

我收到错误:
sqlite3.OperationalError:near“%”:语法错误
当我尝试运行以下代码时。 导入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)
我正在使用
%s
在我的
SQL
查询中使用参数。谢谢你的帮助

您可以使用:

sql = '''SELECT * FROM {0} WHERE URL= {1}'''.format(table, url)
一些想法: -“使用参数”不适用于表名 -由于sql注入,使用字符串格式不好

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

def escape_table_名称(table):
返回''%1!''。格式(table.replace('','')
然后使用参数的
完成带有转义表名称和参数的代码:

sql=''从%s中选择*,其中URL=?''。格式(转义\u表\u名称(表))
stuff=cursor.execute(sql,(url,))
stuff=stuff.fetchall()

模块使用
作为占位符。尝试过了。我得到了相同的错误,除了显示
而不是
%
之外。啊,是的,错过了您尝试传递标识符(表名)的消息。使用占位符是行不通的。您必须将其格式化为字符串。请参阅示例。@IljaEverilä或更好,请修复您的架构,以便不必使用动态表名。