Postgresql 操作错误

Postgresql Operational Error

我是 web.py 的初学者,正在研究 web.py 教程表单部分。我在表单库中看到了用于简单注册的代码。 http://webpy.org/form and the upgrades for web.py0.3 http://webpy.org/docs/0.3/upgrade

我正在尝试编写用于注册用户名和密码的表单,我安装了 pyscopg2 和 postgres2.6.1 以及他们在使用 pip 的教程中推荐的其他工具。 我在practice/bin/code.py

中写了下面的代码
import web 
from web import form


urls = (
       '/' , 'index'
        )
app = web.application(urls , globals())

render = web.template.render('templates/')

signup = form.Form(
        form.Textbox('Username'),
        form.Password('Password'),
        form.Password('Password_Again'),
        validators = [form.Validator('Passwords did not match' , lambda i: i.Password == i.Password_Again)]
)

class index(object):

    def GET(self):
        form = signup()
        return render.formtest(form = form)



    def POST(self):
        form = signup()
        if not form.validates():
            return render.formtest(form = form)

        else:
            db = web.database(dbn='postgres', db='test' ,host="127.0.0.1" ,user='richa9@gmail.com' ,password='123',port='5432')
            login= db.insert('test' , **form.d)
            return "Great success! you connected to your first database!"







if __name__ == "__main__" :
    web.internalerror = web.debugerror
    app.run()

里面 practice/templates/formtest.html

$def with (form)

<form name = "main" method = "POST">
$if not form.valid: <p class = "error"> Try Again! </p>

$:form.render()

<input type = "submit"/> 

</form>

我研究并阅读了 web.py 的文档,但由于我不熟悉应用程序中的数据库,所以我遇到了同样的错误。当我在 cmd 中 运行 code.py 并启动 8080 服务器时,我在 cmd 中得到了这个 Traceback:

127.0.0.1:55677 - - [08/May/2016 13:02:53] "HTTP/1.1 POST /" - 500 Internal Server Error
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\web\application.py", line 239, in process
    return self.handle()
  File "C:\Python27\lib\site-packages\web\application.py", line 230, in handle
    return self._delegate(fn, self.fvars, args)
  File "C:\Python27\lib\site-packages\web\application.py", line 420, in _delegate
    return handle_class(cls)
  File "C:\Python27\lib\site-packages\web\application.py", line 396, in handle_class
    return tocall(*args)
  File "C:\practice\bin\code.py", line 35, in POST
    login= db.insert('test' , **form.d)
  File "C:\Python27\lib\site-packages\web\db.py", line 766, in insert
    db_cursor = self._db_cursor()
  File "C:\Python27\lib\site-packages\web\db.py", line 566, in _db_cursor
    return self.ctx.db.cursor()
  File "C:\Python27\lib\site-packages\web\db.py", line 507, in _getctx
    self._load_context(self._ctx)
  File "C:\Python27\lib\site-packages\web\db.py", line 518, in _load_context
    ctx.db = self._connect(self.keywords)
  File "C:\Python27\lib\site-packages\web\db.py", line 960, in _connect
    conn = DB._connect(self, keywords)
  File "C:\Python27\lib\site-packages\web\db.py", line 546, in _connect
    return self.db_module.connect(**keywords)
  File "C:\Python27\lib\site-packages\psycopg2\__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
OperationalError: could not connect to server: Connection refused (0x0000274D/10061)
        Is the server running on host "127.0.0.1" and accepting
        TCP/IP connections on port 5432?

当我输入不匹配的密码时,formtest.html响应,但数据库没有响应system.Any如何解决?提前致谢。

这里的问题是您需要在您的主机上设置一个 postgresql 服务器才能完成练习。

由于您在 Windows,您需要下载 windows installer and then follow the documentation 如何安装服务器。

安装服务器后,您需要创建登录角色和数据库并将角色分配给数据库,然后才能继续。

为此,请使用作为服务器一部分安装的 pgadminIII 工具;并按照以下步骤操作:

  1. 展开左侧面板 Server Groups 下的 Servers 树。
  2. 双击列出的服务器(应该是 PostgreSQL 9.5 (localhost:5432))。这会将您连接到服务器。您需要使用您在安装程序中设置的密码。
  3. 右键单击 Login Roles,然后 select New Role..
  4. 填写角色名称(这是用户的登录名)
  5. 输入两个密码。
  6. 单击“确定”。
  7. 右键单击 Databases,然后 select New Database..
  8. 给它起个名字
  9. 在所有者字段中,输入您在第 4 步中在角色名称中输入的名称。
  10. 点击确定

然后,在你的代码中你需要调整这一行:

db = web.database(dbn='postgres',
                  db='test', # replace
                  user='richa9@gmail.com', # replace
                  password='123', # replace
                  port='5432', host="127.0.0.1")

并更改适当的值。

重要 - 即使您按照这些说明进行操作,您的代码也可能会失败,因为您尚未在数据库中创建任何表并且您正在尝试插入记录。查看 web.py 文档以了解本教程需要哪些表。