Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从php执行python文件来更新mysql表?_Php_Python_Mysql - Fatal编程技术网

如何从php执行python文件来更新mysql表?

如何从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

我正在尝试单击一个按钮,运行一个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 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的和对象,则假定数据已更新