如何从php执行python文件来更新mysql表?
我正在尝试单击一个按钮,运行一个python文件来执行朴素贝叶斯并将值更新到Mysql表。我的代码如下: Controller.php如何从php执行python文件来更新mysql表?,php,python,mysql,Php,Python,Mysql,我正在尝试单击一个按钮,运行一个python文件来执行朴素贝叶斯并将值更新到Mysql表。我的代码如下: Controller.php public function execute_excel() { shell_exec('python D:\laravel-crud\public\admin\mysqlku.py'); return redirect()->back(); } mysqlku.py *some codes* # update the database
public function execute_excel()
{
shell_exec('python D:\laravel-crud\public\admin\mysqlku.py');
return redirect()->back();
}
mysqlku.py
*some codes*
# update the database with new values
logging.basicConfig(level=logging.DEBUG)
for key,row in values.iterrows():
up = conn.execute("UPDATE mahasiswa SET daftar_kembali = '{}' WHERE id_mahasiswa = {}"
.format(row['daftar_kembali'], row['id_mahasiswa']))
logging.debug(up)
当我直接用Spyder/Terminal运行mysqlku.py
时,我可以很好地更新mysql表,但在Controller.php
中无法这样做
有人知道如何使用shell\u exec()
ResultProxy调试不会显示在Spyder中,但会显示在Terminal中
DEBUG:root:<sqlalchemy.engine.result.ResultProxy object at 0x000001DE4671C5C0>
DEBUG:root:<sqlalchemy.engine.result.ResultProxy object at 0x000001DE4671C668>
DEBUG:root:<sqlalchemy.engine.result.ResultProxy object at 0x000001DE4671C5F8>
etc.
调试:根目录:
调试:根目录:
调试:根目录:
等
您需要与ResultProxy交互。根据SQLAlchemy的: 返回的结果是ResultProxy的一个实例,它引用一个DBAPI游标,并提供一个与DBAPI游标大体兼容的接口。当DBAPI游标的所有结果行(如果有)都用完时,它将被ResultProxy关闭不返回任何行的ResultProxy,例如UPDATE语句(不返回任何行)在构造时立即释放游标资源 试试这个:
logging.debug(up.fetchall())
参考站点:您正在通过网页执行PHP脚本?因为这样它很可能在用户
www-data
下运行,而用户通常没有执行权限,例如Python.@Tox有什么方法可以处理它吗?我还是网络编程新手是的,你可以将www数据
添加到sudoers
中,但这是不可取的,因为这是一个潜在的巨大安全问题。您可以尝试更改Python脚本的所有者:chown www-data:www-data/path/to/my/script.py
@Tox抱歉,由于我使用Windows操作系统,我无法执行您的建议(chown不被识别为内部或外部命令),我尝试使用takeown/f mysqlku.py解决它,但到目前为止没有结果。你知道如何在Windows上使用它吗?我在Windows上开发已经有一段时间了,所以我不确定有什么限制。右键单击文件,然后选择属性
,您可以查看文件的安全设置
,以确定允许谁进行哪种访问。至于您需要向哪个用户授予其他人必须建议的权限。我遇到了以下错误:ResourceClosedError:此结果对象不返回行。它已经自动关闭了。好的,正如我说的,更新查询从不重新返回数据,你能用选择查询检查一下吗,这个程序执行时数据也更新了吗?它与选择查询一起工作(调试它,但不能向web显示它)。是的,当程序直接从python执行时,数据会更新,但不能使用phpth中的shell_exec()执行。这就是说,正在执行查询,但正如我所说的,更新查询从不返回数据。因此,如果您找到ResultyProxy的和对象,则假定数据已更新