簡體   English   中英

通過 python 連接到 postgresql

[英]Connecting to postgresql through python

作為一個更大項目的一部分,我正在嘗試自動創建 PostgreSQL 數據庫和用戶,並為他們分配在 Ubuntu 上運行的角色。 我已經弄清楚如何創建數據庫,並且 psycopg2 是我想要連接到它的問題,我似乎無法找到連接到數據庫的方法。 如果我使用命令

sudo -u postgres bash
psql testBase

我可以訪問數據庫並手動設置規則。 據我所知,postgres 用戶沒有默認密碼,它使用其他類型的身份驗證

os.system("sudo -H -u postgres bash -c 'createuser -DRS test2'")
os.system("sudo -H -u postgres bash -c 'createdb -O test2 testBase'")
conn = psycopg2.connect(database="testBase", user="test2", host="127.0.0.1")

創建數據庫和用戶,然后我得到結果

Traceback (most recent call last):
  File "test2.py", line 7, in <module>
    conn = psycopg2.connect(database="testBase", user="test2", host="127.0.0.1")
  File "/home/openvas/.local/lib/python3.6/site-packages/psycopg2/__init__.py", line 127, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: fe_sendauth: no password supplied

我建議以下場景:

  1. 手動創建數據庫和角色(一次性工作)
  2. 現在使用psql_dumpall創建“模板”(也是一次性工作)
  3. 在您的自動化操作期間,用加載您的轉儲文件替換數據庫創建(一遍又一遍地使用每個新實例)

由於psql_dumpall轉儲了整個數據庫實例,因此在加載轉儲后,您也可以使用角色登錄。 只需在您的代碼中添加密碼更改,對 go 應該很好。

Postgresql 通過 Unix 域套接字提供無密碼連接。 要使用 psycopg2 獲得此行為,請在調用連接構造函數時省略host參數。

conn = psycopg2.connect(database="testBase", user="test2")

如果您使用受密碼保護的連接,您需要編輯pg_hba.conf文件以添加如下行(選擇 IPv4/IPv6):

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
host    testBase        test2             127.0.0.1/32            md5
# IPv6 local connections:
host    testBase        test2             ::1/128                 md5

pg_hba.conf文件包括每一列的描述。

如果你想從不同的主機連接,你需要設置

listen_addresses = '*'

postgresql.conf文件中(並對防火牆進行任何必要的更改)。

更改配置文件后重新啟動/重新加載 postgresql 服務。

正如 jjanes 的評論所表明的那樣,似乎pg_hba.conf已經配置為密碼身份驗證,因此您需要決定是通過 unix 套接字無密碼連接還是通過 tcp/ip 使用用戶/密碼組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM