【问题标题】:Connecting to Postgres sql with Python使用 Python 连接到 Postgresql
【发布时间】:2018-02-09 09:38:30
【问题描述】:

我在 docker 容器上运行 postgressql。我正在尝试通过 python 连接到 postgres 并显示下表是我用来连接到 postgres 的代码:

import psycopg2

conn_string = "host='192.168.99.100:15432' dbname='PREDICTIVE_DS_POSTGRESQL' 
user='ds_user' password='ds_user'"
print("Connecting to database\n ->%s" % (conn_string))
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
print("Connected!\n")

然后我使用下面的 Python 代码来显示 postgres 中的现有表:

def table_exists(con, table_str):

exists = False
try:
    cur = con.cursor()
    cur.execute("select exists(select relname from pg_class where relname='" 
    + table_str + "')")
    exists = cur.fetchone()[0]
    print("exists")
    cur.close()
    except psycopg2.Error as e:
    print(e)
    return exists

    def get_table_col_names(con, table_str):

    col_names = []
  try:
    cur = con.cursor()
    cur.execute("select * from " + table_str + " LIMIT 0")
    for desc in cur.description:
        col_names.append(desc[0])
    cur.close()
except psycopg2.Error as e:
    print(e)

但是,它根本不起作用。它说它无法将翻译主机名“192.168.99.100:15432”连接到地址:未知主机。但是,容器已启动并正在运行,这就是主机名。此外,我不知道其余代码在连接后是否可以工作。

【问题讨论】:

  • 主机名是192.168.99.100,需要单独指定端口。
  • 试试这样的:conn_string = "host=192.168.99.100 port=15432 dbname=PREDICTIVE_DS_POSTGRESQL"
  • 我已经改变了这样的代码: conn_string = psycopg2.connect(host="192.168.99.100", port:"15432", database="PREDICTIVE_DS_POSTGRESQL", user="ds_user", password= “ds_user”)。但是,问题仍然存在我收到无效的语法
  • 尝试:conn_string = "host='' dbname='' user='' password='' port='' " 和然后使用 - psycopg2.connect(conn_string) 连接
  • 该行有相同的语法错误

标签: python postgresql docker


【解决方案1】:

在单独的文件中定义您的数据库凭据。

例如,有一个名为 database.ini 的文件并像这样定义它:

[creds]
host=192.168.99.100
port=15432
database=PREDICTIVE_DS_POSTGRESQL
user=ds_user
password=ds_user

有另一个配置解析器文件来解析它。称它为 config.py

#!/usr/bin/python
try:
    import configparser
except:
    from six.moves import configparser


def config(section,filename='database.ini',):
    parser = configparser.ConfigParser()
    parser.read(filename)
    db = {}
    if parser.has_section(section):
        params = parser.items(section)
        for param in params:
            db[param[0]] = param[1]
    else:
        raise Exception('Section {0} not found in the {1} 
file'.format(section, filename))
    return db

现在,在你的主文件中,像这样导入你的配置函数:

from config import config

并像这样连接:

    dbParams = config("creds")
    con = psycopg2.connect(**dbParams)

【讨论】:

  • 嗨@sindhu_sp 抱歉回复晚了。我刚试了一下,不行。我没有收到任何错误,但它没有读取数据库
猜你喜欢
  • 1970-01-01
  • 2016-12-24
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2016-02-03
  • 1970-01-01
  • 2020-11-21
相关资源
最近更新 更多