Python 使用web2py将BLOB保存到MySQL中

Python 使用web2py将BLOB保存到MySQL中,python,mysql,blob,web2py,data-access-layer,Python,Mysql,Blob,Web2py,Data Access Layer,使用web2py框架,我希望通过文件类型输入选择一个文件,并将其内容保存到MySQL BLOB类型字段中。该文件包含二进制数据 我需要使用DAL进行连接管理,但我有一个SQL过程来完成这项任务。问题是,当我尝试下面的方法时,SQL语法出现了错误 f = form.vars.element.file.read() db.executesql( "CALL someproc('" + f + "');" ) 我尝试过用很多方法插入原始二进制文件,但得到了相同或类似的错误。我还尝试直接使用MySQL

使用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天的时间来解决这项任务,运气不好(
请帮助!

鉴于
DAL.executesql
方法最终调用
cursor().execute(),我不确定第二个示例为什么有效
以完全相同的方式。在任何情况下,如果要将后一种语法与web2py
DAL
对象结合使用,可以通过
db.\u adapter.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', ))

但我不确定这是否适用于将参数传递到存储过程。

It.db.\u adapter.cursor.callproc(…)完成了3.谢谢!在您的问题中,您指出了
db.cursor().execute(“调用someproc(“+f+”);”)
有效。在这段代码中,
db
是一个
MySQLdb
连接对象吗?如果是,我希望
db.\u adapter.cursor.execute(“CALL someproc(“+f+”);”)
也能正常工作,因为它最终会调用
cursor().execute()
。对我来说,这可能是python字符串处理问题。我想直接通过DAL使用游标也是一样的,但不知怎么的,它不是。嗯,正如您所看到的,
db.\u adapter.cursor
连接.cursor()
返回的对象,因此调用
.execute()
任何一种方法都会产生相同的结果。无论如何,我很高兴替代方法对您有效。