2017-07-17 13 views
1

我有以下代碼:Python與Sqlite 3,如何只提取文本,沒有'你?

password_master = str(self.master_password.text()) 
username = str(self.comboBox.currentText()) 
result = c.execute("SELECT * FROM register_table WHERE MASTER = '"+password_master+"' AND USERNAME = '"+username+"'") 
if (len(result.fetchall()) > 0): 
    print("user found") 
    password_check = c.execute("SELECT PASSWORD FROM register_table WHERE USERNAME = '"+username+"' AND MASTER = '"+password_master+"'").fetchall() 
    password = str(password_check) 
    login(username, password) 

從「password_check」查詢我想只提取文本,因爲我需要傳遞變量「密碼」「登錄」功能。 我什麼都試過,但我總是收到以下輸出:

[(u'@[email protected]',)] 

有沒有辦法提前提取只需

passwordtest 

非常感謝!

+2

開始由** **不使用'STR()'的結果行。你只需要取**一行**,所以不要全取它們。 –

+2

「u」不在數據中。 Python打印出數據結構時代表的是數據的表示方式。它是打印的一個工件(即:將數據項目列表轉換爲字符串) –

+2

要詳細說明@BryanOakley的說法,它只是Python的方式,告訴您引號中的字符串是* unicode字符串*。 'u'不是日期的一部分,只是如何打印。 –

回答

2

首先,我將從標準SQL Injection警告開始。當然,這看起來並不像它面臨的網絡,但仍然如此。你應該使用綁定變量。

其次,你的查詢將返回一個數組值,所以你試圖在包含字符串的數組上運行str()函數。我將取代線:

password_check = c.execute("SELECT PASSWORD FROM register_table WHERE USERNAME = '"+username+"' AND MASTER = '"+password_master+"'").fetchall() 
password = str(password_check) 

有:

results = c.execute("SELECT PASSWORD FROM register_table WHERE USERNAME = '"+username+"' AND MASTER = '"+password_master+"'").fetchone() 
password = results[0]