2017-09-16 51 views
0
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時,它告訴我沒有這樣的列。另外,當我只是拿出第二種格式,只是名稱中的硬代碼,它也可以正常工作。爲什麼我在python sqlite3中沒有收到列錯誤?

sqlite3.OperationalError: no such column: Bradley

+0

請把你的'accDATA'表的細節 –

+0

它有三列:用戶名文本,密碼文本,用戶INTEGER –

+0

https://stackoverflow.com/questions/35659616/no-such-column-error- in-python –

回答

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,) 
    ) 
+0

欣賞文檔 –

+0

沒問題@BradleyRay。很高興幫助。 – Kyle

2

你需要把"各地{}分配插入

,但試圖利用這種類型的插入,以防止其對SQL注入時

self.c.execute('UPDATE accDATA SET subscribers = ? WHERE username = ?', (number, uname)) 
相關問題