从技术上讲,可以使用客户端 JavaScript 连接到数据库。然而,正如其他人已经指出的那样,这样做被认为是一种非常糟糕的做法,原因有几个——其中最重要的是安全性。
当要求浏览器加载某个页面时,它会继续向服务器询问在该 URL 中找到的内容。这意味着呈现页面所需的 HTML 文件、外部 JavaScript 文件、图像、样式表和其他资源。由于用户可以访问这些文件,尤其是您的 JavaScript 代码,这意味着他可以访问您的数据库凭据。您可以尝试缩小/混淆代码,但这不会使其更安全。
如果您确实了解所有后果并且出于某种原因仍想这样做,请查看this example.
最好的方法是让服务器处理与数据库的交互。根据您选择的语言,您可以使用 PHP(以及诸如 Apache 之类的 HTTP 服务器)、Java、Python 等构建应用程序的该部分。你甚至可以使用 JavaScript(参见 Node.js)。
由于您要求使用 Python sn-p,因此这里有一个连接到 MySQL 数据库并创建一个 HTTP 服务器来侦听端口 8080 上的连接。对于它将收到的每个 GET 请求,脚本将查询数据库并将结果作为 text/html 发回。
#!/usr/bin/python
import MySQLdb
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
PORT_NUMBER = 8080
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
# prepare a cursor object using cursor() method
cursor = db.cursor()
# execute SQL query using execute() method
cursor.execute("SELECT VERSION()")
# Fetch a single row using fetchone() method
data = cursor.fetchone()
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(data)
return
try:
db = MySQLdb.connect(host="localhost", user="root", passwd="yourpwd", db="pw_exam")
server = HTTPServer(('', PORT_NUMBER), myHandler)
print 'Started httpserver on port ' , PORT_NUMBER
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down the web server'
server.socket.close()