def insert_sub(self, uname, number):
insert = 'UPDATE accDATA SET subscribers = {} WHERE username = {}'.format(number, uname)
self.c.execute(insert)
self.conn.commit()
我用数字格式更改了uname,它没有问题。出于某种原因,当我使用uname时,它告诉我没有这样的列。此外,当我只是取出第二种格式,只是名称中的硬编码时,它也可以正常工作。
sqlite3.OperationalError:没有这样的专栏:Bradley
答案 0 :(得分:2)
分配到插入
时,您需要在"
周围加{}
但是尝试使用这种类型的插入来防止它反对SQL注入
self.c.execute('UPDATE accDATA SET subscribers = ? WHERE username = ?', (number, uname))
答案 1 :(得分:2)
我认为您的格式化用户名可能会丢失引号。不建议使用.format()方法构建这样的查询,因为这可能会导致sql注入。但是,就您所看到的直接问题而言,最有可能是报价。
def insert_sub(self, uname, number):
insert = 'UPDATE accDATA SET subscribers = {} WHERE username = \'{}\''.format(number, uname)
self.c.execute(insert)
self.conn.commit()
Here是有关将参数传递给cursor.execute方法的文档。
以下是使用参数化语句的示例。
def insert_sub(self, uname, number):
self.c.execute(
"UPDATE accDATA SET subscribers=? WHERE username=?",
(uname, number,)
)