【发布时间】:2017-11-26 05:09:03
【问题描述】:
我有一个有表的数据库。我编写了一个简单的python程序来写入数据库,如下所示。
import sqlite3
import sys
arg = sys.argv
handle= sqlite3.connect('new_test.db')
print "Opened database successfully";
print type(arg[1]), arg[2]
handle.execute("INSERT INTO RECORD (ID,NAME,PROJECT,) \
VALUES ('%s','%s','%s')" %(str(arg[1]), str(arg[2]),str
(arg[3]));
print "after execute"
handle.commit()
print "Records created successfully";
handle.close()
这在命令行 python insert.py arg1 arg2 arg3 中可以正常工作
现在我用 php 代码做同样的事情:
$data=shell_exec("python insert.py $id $name $project").
它不会向表中添加条目。执行在handle.execute附近停止
- 从打印语句中检查。我应该改变或改变什么?
是因为某些权限还是我必须添加任何内容? 注意:条目不重复
编辑:我尝试的一些其他可能有用的东西:
我尝试通过 PHP 调用脚本,但在数据库中添加了静态字符串参数。还是没通过。
我从 python 程序中注释掉了
handle.execute(),程序现在执行到最后。 所以问题出在那个指令上。- 检查了环境变量和python模块,都符合预期。
【问题讨论】:
-
您可以在没有 python 的情况下使用 SQLite 进行操作...它是强制性的吗?并首先比较命令是否相同。
-
@FieryCat 是的 sqlite 也可以用 PHP 完成。但我更喜欢python。究竟是哪个命令?
-
您是从命令行还是通过 Web 请求运行 PHP 脚本?
-
来自网页
-
我不知道 python,但这看起来很奇怪
handle.execute("INSERT INTO RECORD (ID,NAME,PROJECT,) \ VALUES ('%s','%s','%s','%s','%s')" %(str(arg[1]), str(arg[2]),str (arg[3]));看起来像printf()语法,但你只传递 3 个参数并指定 3 列但有 4 个%s然后继续3 args 出于某种原因。