为什么我在python sqlite3中没有收到列错误?

时间:2017-09-16 19:18:58

标签: python sqlite

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

2 个答案:

答案 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,)
    )