使用 web2py 将 BLOB 保存到 MySQL
Posted
技术标签:
【中文标题】使用 web2py 将 BLOB 保存到 MySQL【英文标题】:Save BLOB into MySQL using web2py 【发布时间】:2014-12-13 08:48:24 【问题描述】:使用 web2py 框架,我想通过文件类型输入选择文件并将其内容保存到 mysql BLOB 类型字段中。该文件包含二进制数据。
我需要使用 DAL 进行连接管理,但我有一个 SQL 过程来完成这项任务。问题是当我在下面尝试这个时,我得到了 SQL 语法错误。
f = form.vars.element.file.read()
db.executesql( "CALL someproc('" + f + "');" )
我尝试以多种方式插入原始二进制文件并得到相同或相似的错误。我也尝试过直接使用 MySQLdb:
f = form.vars.element.file.read()
db.cursor().execute( "CALL someproc('" + f + "');" )
db.commit()
这很好用,但我需要使用上面的 DAL 版本,所以问题仍然存在。
我花了 3 天时间解决了这个任务,但没有运气。 :( 请帮忙!
【问题讨论】:
【参考方案1】:鉴于DAL.executesql
方法最终以完全相同的方式调用cursor().execute()
,我不确定您的第二个示例为何有效。在任何情况下,如果您想将后一种语法与 web2py DAL
对象结合使用,您可以通过 db._adaptor.cursor
访问游标。因此,您的第二个示例将更改为:
db = DAL('mysql://...')
db._adapter.cursor.execute( "CALL someproc('" + f + "');" )
另一种选择可能是使用.callproc
方法:
db._adapter.cursor.callproc('someproc', (f, ))
注意,db.executesql()
也有占位符:
db.executesql('...WHERE name=%s', ('Mary', ))
但我不确定这是否适用于将参数传递给存储过程。
【讨论】:
它接缝 db._adapter.cursor.callproc(...) 从 3 中起到了作用。谢谢! 在您的问题中,您表示db.cursor().execute( "CALL someproc('" + f + "');" )
有效。在该代码中,db
是 MySQLdb
连接对象吗?如果是这样,我希望db._adapter.cursor.execute( "CALL someproc('" + f + "');" )
也能正常工作,因为它最终会调用cursor().execute()
。
对我来说,这似乎是一个 python 字符串处理问题。我认为直接通过 DAL 使用光标是一样的,但不知何故不是。
嗯,如您所见here,db._adapter.cursor
是connection.cursor()
返回的对象,因此在其中一个上调用.execute()
应该会产生相同的结果。无论如何,我很高兴替代方案对您有用。以上是关于使用 web2py 将 BLOB 保存到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章
使用 Chilkat 和 SQL Server 将单个电子邮件附件保存到 BLOB
如何在 Web2py 中使用 jquery 将数据从视图传输到控制器操作函数