【发布时间】:2014-04-15 00:34:24
【问题描述】:
我正在开发一个后端由 Python 提供支持的网站。以下脚本从 JavaScript 接收值并将其写入数据库。
import cgi
import sqlite3
form = cgi.FieldStorage()
brand = form['brand'].value
model = form['model'].value
db = sqlite3.connect("dbase.db")
query = "INSERT INTO requests (brand, model) VALUES (?, ?)"
db.execute(query, (brand, model,))
db.commit()
db.close()
但是调用脚本会返回500 Internal Server Error。令我惊讶的是,以下代码在终端上独立运行非常完美。
import sqlite3
brand = 'nokia'
model = 'lumia 625'
db = sqlite3.connect("dbase.db")
query = "INSERT INTO requests (brand, model) VALUES (?, ?)"
db.execute(query, (brand, model,))
db.commit()
db.close()
我正在使用 Python 2.7.5 并在 Lighttpd 服务器上运行。此外,db.execute() 部分是发生错误的地方。
我该如何解决这个问题?
【问题讨论】:
-
你有错误信息吗?我愿意打赌
sqlite3.OperationalError: no such table requests参与其中。 -
把它放在 CGI 脚本的开头:
import cgitb; cgitb.enable(). -
您在
sqlite3.connect()调用中使用了 相对 路径; sqlite3 不会抱怨在 LigHTTPD 为您的脚本设置的当前工作目录中找不到数据库,但它将是空的并且其中没有表。 -
编写 CGI 脚本时,使用
cgitbmodule 可以更轻松地查看脚本产生的错误。 -
那你没有打开文件的权限。请记住,CGI 脚本是在不同的用户帐户下运行的!
标签: python sqlite internal-server-error