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ä或更好,请修复您的架构,以便不必使用动态表名。