2016-01-09 13 views
1

我試圖插入到我的sqlite3數據庫,一個加密的用戶名,但其包括b'繼續實際值。插入字節數據到Sqlite沒有b'之前

這對我的應用程序造成了問題。

我的代碼如下所示:

hashed_username = enc(prompt_account_username, salt) 
print('\n\nusername: {}\n\n'.format(hashed_username)) 

此打印:

username: 

b'sc\x00\x02\x16\x88\x04\xa2\x9d\xb9!\xe0\x9e-5\xb3\x8a\xd8r\xbc\x83\x01\r\x98\xb1\xe3\xb2i=\x16\xc8Y\xbe\xdd\x0f\x8e\x8c\xa2\xb0\xd0R\xf7gx2\x1d\xfb\xfeX\xda\xb9Y\xd6Ls\x88\xaa<\x9c\x12\xf3\xbeq\r\x8d\xcb\xc0\x8adF\x1dl\xc5\xde' 

這是再插入這個完整的字節值,包括b'

當我運行:

conn.execute(""" 
      INSERT INTO my_acct 
      (acct_username) 
      VALUES (?) """, (v[0],) 
      ) 

我怎樣才能得到它插入,剛值,沒有b',值,如:

sc\x00\x02\x16\x88\x04\xa2\x9d\xb9!\xe0\x9e-5\xb3\x8a\xd8r\xbc\x83\x01\r\x98\xb1\xe3\xb2i=\x16\xc8Y\xbe\xdd\x0f\x8e\x8c\xa2\xb0\xd0R\xf7gx2\x1d\xfb\xfeX\xda\xb9Y\xd6Ls\x88\xaa<\x9c\x12\xf3\xbeq\r\x8d\xcb\xc0\x8adF\x1dl\xc5\xde 

謝謝

回答

2

您需要使用memoryview二進制數據插入到sqlite的,就像這樣:

conn.execute(""" 
     INSERT INTO my_acct 
     (acct_username) 
     VALUES (?) """, (memoryview(v[0]),) 
     ) 


注意:在蟒蛇2一個將使用buffer在這種情況下內建。 buffer不再可用於python 3並且已被替換爲memoryview

+0

當我嘗試這個: 插入:名稱'緩衝區'未定義。 SQL看起來像:conn.execute(「」「INSERT INTO my_acct(acct_username)VALUES(?)」「」,(buffer(v [0]),))。我究竟做錯了什麼? – CodeTalk

+0

'buffer'是一個python 2內建的。我猜你正在使用python 3,所以在這種情況下,你可以用'memoryview'替換它。我更新了我的答案 – arainone

+0

非常感謝! – CodeTalk