假設我想通過sqlite3存盤一個簡單的字串串列:
my_list = ['a'/span>,'b'/span>,'c'/span>]
或者一個帶有屬性和方法的python物件。
到目前為止,我所嘗試的是序列化(pickle)my_list,回傳的位元組表示是b'x80x03]qx00(Xx01x00x00aqx01Xx01x00x00bqx02Xx01x00x00cqx03e。'。然而,不能存盤在一個BLOB變數中。
我是否應該使用一個字串變數來代替,或者我是否應該想辦法將序列化物件轉換為不同的格式,以便在存盤之前擺脫?
注意,我正在學習SQL和資料轉換的基礎知識。
uj5u.com熱心網友回復:
看看如何將資料序列化。 將復雜的物件存盤到關系型資料庫(sqlite)并不容易。 我建議將資料保存為json字串,或者是保存在JSONField中。
請問,你是如何訪問 sqlite 的?(例如,sqlite模塊,通過django模型,flask或其他)
你可以把這段代碼作為一個參考(我使用的是sqlite3模塊)。
我想你可能漏掉了sqlite3.Binary(binary_obj)
import sqlite3
import sqlite3
輸入pickle
def store_in_db(obj):
binary_obj = pickle.dumps(obj)。
print('binary_obj: '/span>, binary_obj)
conn = sqlite3.connect('demo.db')
conn.execute('CREATE TABLE IF NOT EXISTS DemoTable (binary_field BLOB)')
conn.execute('INSERT INTO DemoTable VALUES(?)', [sqlite3.Binary(binary_obj)])
conn.commit()
conn.close()
def retrieve_from_db():
conn = sqlite3.connect('demo.db')
row = conn.execute('SELECT * FROM t').fetchone()
obj = pickle.loads(row[0] )
conn.close()
回傳obj
my_list = ['a'/span>, 'b'/span>, 'c'/span>]
store_in_db(my_list)
print(retrieve_from_db))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327109.html
標籤:
