首页 > 解决方案 > 如何从 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.

标签: phppythonmysql

解决方案


您需要与 ResultProxy 进行交互。根据 SQLAlchemy 的文档

返回的结果是一个 ResultProxy 的实例,它引用了一个 DBAPI 游标,并提供了一个与 DBAPI 游标兼容的接口。DBAPI 游标将在其所有结果行(如果有)用尽时由 ResultProxy 关闭。不返回任何行的 ResultProxy,例如 UPDATE 语句(没有任何返回的行),在构造时立即释放游标资源。

尝试这个:

logging.debug(up.fetchall())

参考站点:https ://code-maven.com/slides/python-programming/sqlalchemy-engine-select


推荐阅读