我试图编写一个简单的Python脚本,将.odt文档插入SQLite数据库。这是我到目前为止所做的,但似乎不起作用:
f=open('Loremipsum.odt', 'rb')
k=f.read()
f.close()
cursor.execute="INSERT INTO notes (note) VALUES ('%s')" %(sqlite.Binary(k))
cursor.close()
conn.close()
我没有收到任何错误消息,但据我所见,记录没有插入。我做错什么了?另外,如何提取存储的文档?谢谢!
问题:
你没有显示你运行的完整代码。你不应该让回答者猜测像
sqlite.Binary(k)
这样的事情。基本问题:您没有提交事务。在
conn.close()
之前使用conn.commit()
。这个例子有很多问题。我会的 一个接一个地说。
execute()
方法,而是将一些字符串赋给一个对象。(在Python中,方法也是对象。)CREATE TABLE
语句,那么将创建一个新的隐式事务。必须发出commit()
语句才能将数据保存到数据库文件中。在SQLite中,除了SELECT
之外的任何语句都会启动隐式事务。(某些数据库,如MySQL,默认情况下处于自动提交模式。这对于SQLite是不正确的。)下面是一个正确的工作示例,它将把LibreOffice文档写入文档 SQLite数据库的表:
book.odt文件位于当前工作目录中。我们没有手动调用commit()方法,因为这是由with关键字在幕后处理的。
不确定您正在使用的
sqlite.Binary
是什么,但无论如何,这里有一个工作示例:使用Python2.6运行时,此代码将按预期和期望显示: '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f!'#$%&;\'(**+,-./0123456'
请注意,需要使用
buffer
插入blob,并使用str
将其作为字符串读回(因为它也使用buffer
类型)——如果您只是将其写入磁盘,则不需要后一段(因为文件的write
方法接受缓冲区对象和接受字符串一样)。相关问题 更多 >
编程相关推荐