无法在单独的docker容器中使用python执行Postgresql命令

时间:2016-05-20 00:31:11

标签: python database postgresql docker psycopg2

我有这个设置
1) Docker容器服务器在使用命令
创建的后台运行postgresql映像 docker run --name post2 -d postgres
2)客户端Docker容器运行ubuntu,python运行psycopg2
我的Postgresql容器暴露在ip地址172.7.0.2:5432上。在我的客户端容器中输入命令curl 172.17.0.2:5432时,我能够与服务器通信

Docker容器服务器记录LOG:invalid length of startup packet。我不发送任何消息包,但它显示与服务器的通信。

我在 Client Docker Container 中的python2 shell中运行这些命令。

>>> conn = psycopg2.connect(host='172.17.0.2', port='5432', user='postgres', database='yoman')
>>> cur = conn.cursor()
>>> cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")

>>> conn1 = psycopg2.connect(host='172.17.0.2', port='5432', user='postgres', database='template1')

yeomantemplate1是我创建的服务器中的预创建数据库。 我相信它成功地与服务器通信,因为它认识到数据库asdf不存在于下面的堆栈跟踪中。

 >>> conn = psycopg2.connect(host='172.17.0.2', port='5432', user='postgres', database='asdfd')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 164, in connect
        conn = _connect(dsn, connection_factory=connection_factory, async=async)
    psycopg2.OperationalError: FATAL:  database "asdfd" does not exist

我的问题是我的命令没有在数据库中执行。 我运行下面的代码来创建一个名为“test”的表,但没有任何反应。也没有抛出错误。 cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")

我的Postgres数据库,显示没有表格。

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 yoman     | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
(4 rows)

postgres=# \c yoman
You are now connected to database "yoman" as user "postgres".
yoman=# \d
No relations found.

感谢您的任何帮助。

感谢。

0 个答案:

没有答案