我正在使用sqlite来组织使用刮板脚本获取的数据,但无法执行“插入”命令。
我是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
我希望c.execute
中的insertToTable
将数据插入表中,但是我得到的是这个错误:
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
的事实上,但我被困在这里。 / p>
请帮助。 提前致谢! =]
答案 0 :(得分:0)
您有错字:
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(table)的末尾是您已插入字符串中的全部内容。多余的)
导致.format()结束抛出语法错误,因为它不希望使用,
。您没有传递任何其他值。
话虽这么说,以后不要再对SQL语句使用字符串格式(作为一般说明),因为出于安全目的这是不好的做法: