2017-03-21 43 views
0

我創造了我的web2py代碼的文件如下:的web2py將文件添加到一個數據庫

tmpPckUpFile = open('FileContent.txt', 'w+') 

我給它添加

tmpPckUpFile.write("some stuff") 

我關閉該文件

tmpPckUpFile.close() 

然後嘗試更新DB中的一行

db(db.project_pickup_approvals.id==request.args(0)).update(PickupContent = tmpPckUpFile) 

在這一點上,我通常得到一個錯誤: I/O操作上關閉的文件

所以我已經嘗試做的是去除關閉(),現在該文件被添加到數據庫,但什麼都沒有寫。我收到一個空白文件。

問:如何寫入文件並將其放入數據庫?

+0

也許你需要使用'tmpPckUpFile.seek(0)'而不是關閉文件。 (話說回來,我不知道'db.update()'方法可以做什麼)。 – quamrana

+0

seek()做什麼? – fifamaniac04

+0

它移動內部指針。在這種情況下,將其移回文件的開頭,以便可以再次讀取內容。 db.update()是做什麼的? – quamrana

回答

0

如果您不想在文件系統上保留原始的「FileContent.txt」臨時文件,則可以將內容寫入StringIO對象,該對象是一個類文件對象,不需要創建文件系統上的實際文件。如果你與你原來的tmpPckUpFile = open('FileContent.txt', 'w+')線替換前兩行

import cStringIO 
tmpPckUpFile = cStringIO.StringIO() 
tmpPckUpFile.write('some stuff') 
tmpPckUpFile.seek(0) 
upload_field = db.project_pickup_approvals.PickupContent 
db(db.project_pickup_approvals.id == request.args(0)).update(
    PickupContent=upload_field.store(tmpPckUpFile, filename='myfile.txt')) 
tmpPckUpFile.close() 

上面的代碼也應該工作。