php - 如何从 php 执行 python 文件来更新 mysql 表?
问题描述
我正在尝试单击按钮以运行 python 文件来执行朴素贝叶斯并将值更新到 Mysql 表。我的代码如下:
控制器.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 运行时,我可以完美地更新 mysql 表mysqlku.py
,但不能在Controller.php
.
任何人都知道如何使它工作shell_exec()
?
ResultProxy 调试不会显示在 Spyder 中,但会显示在终端中。
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())
参考站点:https ://code-maven.com/slides/python-programming/sqlalchemy-engine-select