如何修复';sqlite3.OperationalError:接近"";:';python



我使用sqlite来组织使用scraper脚本获取的数据,在执行"insert into"命令时遇到了问题。

作为一个Python爱好者,我正在为一个电子网站制作一个刮刀。我已经有了一个工作脚本,可以抓取所有页面,直到我决定修改代码创建一个新的列,并使用今天的日期命名该列。现在,由于某种原因,向表中插入数据的SQL命令拒绝执行我添加的新列。

是否尝试使用将新列添加到SQL命令中?方法和.format()方法,但没有成功。尝试了各种"周围的位置"?s和{}s。

这是代码:

class Product:
def __init__(self, prodId, title, price=None):
self.prodId = prodId
self.title = title
self.price = price
self.currDatePriceCloumnName = date + 'Price'
def insertToTable(self):
self.addColumn()
conn = sqlite3.connect(databaseName)
c = conn.cursor()
c.execute("insert into {} (?,?,?) values (?,?,?)".format(table),('Product_ID','Title',str(self.currDatePriceCloumnName),str(self.prodId),str(self.title),str(self.price)))
conn.commit()
conn.close()
def addColumn(self):
conn = sqlite3.connect(databaseName)
c = conn.cursor()
try:
c.execute("alter table {} add column '?'".format(table),(str(self.currDatePriceCloumnName),))
conn.commit()
conn.close()
except:
pass

我希望insertToTable中的c.execute将数据插入到表中,但我得到的是这个错误:

File "/home/sergio/Desktop/test/scraper.py", line 67, in insertToTable
c.execute("insert into {} (?,?,?) values (?,?,?)".format(table),('Product_ID','Title',str(self.currDatePriceCloumnName),str(self.prodId),str(self.title),str(self.price)))
sqlite3.OperationalError: near "?": syntax error

奇怪的是,列是创建的,但没有填充。当我使用.format()方法时,错误具有所需的列名,而不是?,这告诉我,问题可能与我使用self.currDatePriceCloumnName的事实有关,但我一直被困在这里。

请帮忙。。提前感谢!=]

您在中有一个拼写错误

c.execute("insert into {} (?,?,?) values (?,?,?)".format(table),('Product_ID','Title',str(self.currDatePriceCloumnName),str(self.prodId),str(self.title),str(self.price)))

地点:

values (?,?,?)".format(table),

.format(表)的末尾是您插入字符串中的全部内容。额外的)导致.format()结束抛出语法错误,因为它不需要,。您没有传递任何其他值。

也就是说,以后不要在SQL语句中使用字符串格式(作为一般的附带说明),因为出于安全目的,这是一种糟糕的做法:

https://www.w3schools.com/sql/sql_injection.asp

相关内容

  • 没有找到相关文章

最新更新